核心提示:分享一下 3DES 的前后端加密。Java:package com.core.util;import javax.crypto.Cipher;import javax.crypto.SecretKey...
分享一下 3DES 的前后端加密。
Java:
package com.core.util; import javax.crypto.Cipher; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESedeKeySpec; import javax.crypto.spec.IvParameterSpec; import java.security.Key; import java.util.*; import java.util.concurrent.TimeUnit; /** * 3DES加密工具类 */ public class DesUtils { // 密钥 private final static String secretKey = "自己的"; // 向量 private final static String iv = "01234567"; // 加解密统一使用的编码方式 private final static String encoding = "utf-8"; /** * 3DES加密 * * @param plainText 普通文本 * @return * @throws Exception */ public static String encode(String plainText) throws Exception { Key deskey = null; DESedeKeySpec spec = new DESedeKeySpec(secretKey.getBytes()); SecretKeyFactory keyfactory = SecretKeyFactory.getInstance("desede"); deskey = keyfactory.generateSecret(spec); Cipher cipher = Cipher.getInstance("desede/CBC/PKCS5Padding"); IvParameterSpec ips = new IvParameterSpec(iv.getBytes()); cipher.init(Cipher.ENCRYPT_MODE, deskey, ips); byte[] encryptData = cipher.doFinal(plainText.getBytes(encoding)); return Base64.encode(encryptData); } /** * 3DES解密 * * @param encryptText 加密文本 * @return * @throws Exception */ public static String decode(String encryptText) throws Exception { Key deskey = null; DESedeKeySpec spec = new DESedeKeySpec(secretKey.getBytes()); SecretKeyFactory keyfactory = SecretKeyFactory.getInstance("desede"); deskey = keyfactory.generateSecret(spec); Cipher cipher = Cipher.getInstance("desede/CBC/PKCS5Padding"); IvParameterSpec ips = new IvParameterSpec(iv.getBytes()); cipher.init(Cipher.DECRYPT_MODE, deskey, ips); byte[] decryptData = cipher.doFinal(Base64.decode(encryptText)); return new String(decryptData, encoding); } }
Java中用到的base64加密前参考之前的 BASE43 加密
微信小程序 js
var cryptoJS = require('../utils/CryptoJS.js'); var key = "自己的";//秘钥 var iv = "01234567";//向量 /** * 加密 */ function encryptByDES(message) { var keyHex = cryptoJS.CryptoJS.enc.Utf8.parse(key); var encrypted = cryptoJS.CryptoJS.TripleDES.encrypt(message, keyHex, { iv: cryptoJS.CryptoJS.enc.Utf8.parse(iv), mode: cryptoJS.CryptoJS.mode.CBC, padding: cryptoJS.CryptoJS.pad.Pkcs7 }); return encrypted.toString(); } /** * 解密 */ function decryptByDES(ciphertext) { var keyHex = cryptoJS.CryptoJS.enc.Utf8.parse(key); var decrypted = cryptoJS.CryptoJS.TripleDES.decrypt({ ciphertext: cryptoJS.CryptoJS.enc.Base64.parse(ciphertext) }, keyHex, { iv: cryptoJS.CryptoJS.enc.Utf8.parse(iv), mode: cryptoJS.CryptoJS.mode.CBC, padding: cryptoJS.CryptoJS.pad.Pkcs7 }); return decrypted.toString(cryptoJS.CryptoJS.enc.Utf8); } module.exports = { encryptByDES: encryptByDES, decryptByDES: decryptByDES }
导入的 CryptoJS.js 在本人的博客中,请自行查找。