栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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;

}

 


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/424006.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号