您的位置:首页 > 编程语言 > PHP开发

java php DES 加密解密

2014-05-07 10:40 567 查看


java php DES 加密解密

博客分类:

php

PHPJavaSUN算法Security

Java代码


import java.io.IOException;

import java.security.SecureRandom;

import javax.crypto.Cipher;

import javax.crypto.SecretKey;

import javax.crypto.SecretKeyFactory;

import javax.crypto.spec.DESKeySpec;

import sun.misc.BASE64Decoder;

import sun.misc.BASE64Encoder;

public class DES {

private byte[] desKey;

public DES(String desKey) {

this.desKey = desKey.getBytes();

}

public byte[] desEncrypt(byte[] plainText) throws Exception {

SecureRandom sr = new SecureRandom();

byte rawKeyData[] = desKey;

DESKeySpec dks = new DESKeySpec(rawKeyData);

SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");

SecretKey key = keyFactory.generateSecret(dks);

Cipher cipher = Cipher.getInstance("DES");

cipher.init(Cipher.ENCRYPT_MODE, key, sr);

byte data[] = plainText;

byte encryptedData[] = cipher.doFinal(data);

return encryptedData;

}

public byte[] desDecrypt(byte[] encryptText) throws Exception {

SecureRandom sr = new SecureRandom();

byte rawKeyData[] = desKey;

DESKeySpec dks = new DESKeySpec(rawKeyData);

SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");

SecretKey key = keyFactory.generateSecret(dks);

Cipher cipher = Cipher.getInstance("DES");

cipher.init(Cipher.DECRYPT_MODE, key, sr);

byte encryptedData[] = encryptText;

byte decryptedData[] = cipher.doFinal(encryptedData);

return decryptedData;

}

public String encrypt(String input) throws Exception {

return base64Encode(desEncrypt(input.getBytes()));

}

public String decrypt(String input) throws Exception {

byte[] result = base64Decode(input);

return new String(desDecrypt(result));

}

public static String base64Encode(byte[] s) {

if (s == null)

return null;

BASE64Encoder b = new sun.misc.BASE64Encoder();

return b.encode(s);

}

public static byte[] base64Decode(String s) throws IOException {

if (s == null)

return null;

BASE64Decoder decoder = new BASE64Decoder();

byte[] b = decoder.decodeBuffer(s);

return b;

}

public static void main(String[] args) throws Exception {

String key = "abcdefgh";

String input = "a";

DES crypt = new DES(key);

System.out.println("Encode:" + crypt.encrypt(input));

System.out.println("Decode:" + crypt.decrypt(crypt.encrypt(input)));

}

}

php 方法一

Php代码


<?php

class DES1 {

var $key;

function DES1($key) {

$this->key = $key;

}

function encrypt($input) {

$size = mcrypt_get_block_size('des', 'ecb');

$input = $this->pkcs5_pad($input, $size);

$key = $this->key;

$td = mcrypt_module_open('des', '', 'ecb', '');

$iv = @mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);

@mcrypt_generic_init($td, $key, $iv);

$data = mcrypt_generic($td, $input);

mcrypt_generic_deinit($td);

mcrypt_module_close($td);

$data = base64_encode($data);

return $data;

}

function decrypt($encrypted) {

$encrypted = base64_decode($encrypted);

$key =$this->key;

$td = mcrypt_module_open('des','','ecb','');

//使用MCRYPT_DES算法,cbc模式

$iv = @mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);

$ks = mcrypt_enc_get_key_size($td);

@mcrypt_generic_init($td, $key, $iv);

//初始处理

$decrypted = mdecrypt_generic($td, $encrypted);

//解密

mcrypt_generic_deinit($td);

//结束

mcrypt_module_close($td);

$y=$this->pkcs5_unpad($decrypted);

return $y;

}

function pkcs5_pad ($text, $blocksize) {

$pad = $blocksize - (strlen($text) % $blocksize);

return $text . str_repeat(chr($pad), $pad);

}

function pkcs5_unpad($text) {

$pad = ord($text{strlen($text)-1});

if ($pad > strlen($text))

return false;

if (strspn($text, chr($pad), strlen($text) - $pad) != $pad)

return false;

return substr($text, 0, -1 * $pad);

}

}

$key = "abcdefgh";

$input = "a";

$crypt = new DES1($key);

echo "Encode:".$crypt->encrypt($input)."<br/>";

echo "Decode:".$crypt->decrypt($crypt->encrypt($input));

?>

php 方法2

使用phpseclib中的DES

Php代码


<?php

include('DES.php');

$des = new Crypt_DES();

$des->setKey('abcdefgh');

$plaintext = 'a';

$jiami = base64_encode($des->encrypt($plaintext));

echo "Encode:".$jiami."<br/>";

echo "Decode:".$des->decrypt(base64_decode($jiami));

?>

DES.rar (9.4 KB)
下载次数: 272
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: