3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次DES加密算法。
3DES又称Triple DES,是DES加密算法的一种模式,它使用2条不同的56位的密钥对数据进行三次加密。
数据加密标准(DES)是美国的一种由来已久的加密标准,它使用对称密钥加密法,并于1981年被ANSI组织规范为ANSI X.3.92。
DES使用56位密钥和密码块的方法,而在密码块的方法中,文本被分成64位大小的文本块然后再进行加密。比起最初的DES,3DES更为安全。
3DES(即Triple DES)是DES向AES过渡的加密算法(1999年,NIST将3-DES指定为过渡的加密标准),加密算法,其具体实现如下:设Ek()和Dk()代表DES算法的加密和解密过程,K代表DES算法使用的密钥,P代表明文,C代表密文,这样:
版本
语言 | 版本 |
---|
PHP | 7.3.11 |
Java | 1.8.0_231 |
加密
PHP
CryptUtil.encrypt
1 2 3 4 5 6 7 8 9 10
| public static function encrypt($data, $key) { $strPadded = $data; if (strlen($strPadded) % 8) { $strPadded = str_pad($strPadded,strlen($strPadded) + 8 - strlen($strPadded) % 8, "\0"); } $key = self::getKey($key); $encData = openssl_encrypt($strPadded, self::CIPHER_ALGO, $key, self::OPTIONS, self::IV); return base64_encode($encData); }
|
Java
CryptUtil.encryptBy3DesAndBase64
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| public static String encryptBy3DesAndBase64(String content, String keyStr, String encoding) throws Exception { byte output[] = null; byte input[] = null; int residue = (content.getBytes(encoding).length) % 8; if (0 != residue) { int padLen = 8 - residue; StringBuffer strBuf = new StringBuffer(content); for (int i = 0; i < padLen; i++) { strBuf.append(' '); } input = (new String(strBuf)).getBytes(encoding); } else { input = content.getBytes(encoding); } output = encryptBy3Des(input, keyStr); return Base64.encode(output).replaceAll("[\\n\\r]", ""); }
|
解密
PHP
CryptUtil.decrypt
1 2 3 4 5 6 7
| public static function decrypt($data, $key) { $key = self::getKey($key); $data = base64_decode($data); $decData = openssl_decrypt($data, self::CIPHER_ALGO, $key, self::OPTIONS, self::IV); return trim($decData); }
|
Java
CryptUtil.decryptBy3DesAndBase64
1 2 3 4 5 6 7 8
| public static String decryptBy3DesAndBase64(String content, String keyStr, String encoding) throws Exception { byte output[] = null; byte input[] = null; input = Base64.decode(content); output = decryptBy3Des(input, keyStr); String retStr = new String(output, encoding); return (retStr.trim()); }
|
Demo
完整 Demo 源码:BNDong/demo/PhpJava3DES