PHP7.2 3DES 和Java3DES交互加密解密(mcrypt

PHP7.2 3DES 和Java3DES交互加密解密(mcrypt,第1张

PHP7.2 3DES 和Java3DES交互加密解密(mcrypt

数据加密标准(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;

}

 


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5075498.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-16
下一篇 2022-11-16

发表评论

登录后才能评论

评论列表(0条)

保存