数据加密标准(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; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)