数据加密标准(DES)是美国的一种由来已久的加密标准,它使用对称密钥加密法,并于1981年被ANSI组织规范为ANSI X.3.92。
3DES(或称为Triple DES )是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称,也是是DES加密算法的一种模式。它相当于是对每个数据块应用三次DES加密算法。
3DES(即Triple DES)是DES向AES过渡的加密算法(1999年,NIST将3-DES指定为过渡的加密标准)
以下使用PHP的openssl DES-EDE3 进行加解密 可逆加密解密
public function encrypt($encrypted, $key)
{
$encData = openssl_encrypt($encrypted, 'DES-EDE3', $key, OPENSSL_RAW_DATA);
$encData = base64_encode($encData);
return $encData;
}
public function decrypt($decrypted, $key)
{
$decrypted = base64_decode($decrypted);
$decData = openssl_decrypt($decrypted, 'DES-EDE3', $key, OPENSSL_RAW_DATA);
return $decData;
}
注意:
1.PHP7.1 后移除了 mcrypt ,考虑兼容性所以使用 openssl
2.加密模式用DES-EDE3是因为openssl不支持ECB模式
3.如果method为DES-ECB,则method为DES-ECB,则method为DES-ECB,则iv无需填写
如果为AES 方式需要传iv 16位字符串
填充方式说明:
OPENSSL_NO_PADDING 无填充
OPENSSL_ZERO_PADDING 0填充
OPENSSL_RAW_DATA方式【会用PKCS7进行补位】 若此填充结果乱码则进行base64_encode转以下 解密时先base64_decode
php解密JAVA的DESede/ECB/PKCS5Padding方式如下:
JAVA-3DES解密(加解密的方式为3DES,以base64编码输出,密钥以16进制的字符串形式提供):
public static String getDecryptedValue(String value, String key) throws Exception {
if (null == value || "".equals(value)) {
return "";
}
byte[] valueByte = base64.decode(value);
byte[] sl = decrypt3DES(valueByte, BytesUtil.hexToBytes(key));
String result = new String(sl);
return result;
}
public static byte[] decrypt3DES(byte[] input, byte[] key) throws Exception {
Cipher c = Cipher.getInstance("DESede/ECB/PKCS5Padding");
c.init(Cipher.DECRYPT_MODE, new SecretKeySpec(key, "DESede"));
return c.doFinal(input);
}
PHP3DES解密 :
public function decrypt($decrypt,$key){
$res = openssl_decrypt(base64_decode($decrypted),'DES-EDE3',$key,OPENSSL_NO_PADDING);
return $res;
}
若解码出来是乱码则应将密钥用hex2bin方式转换成AASCII 字符 如下:
public function decrypt($decrypt,$key){
$res = openssl_decrypt(base64_decode($decrypted),'DES-EDE3',hex2bin($key),OPENSSL_NO_PADDING);
return $res;
}



