由于公司安全测试,要对重要信息进行加密传输,使得Java、Android、iOS一致。
java代码
- package gov.communitycloud.user.utils;
- import java.math.BigInteger;
- import javax.crypto.Cipher;
- import javax.crypto.KeyGenerator;
- import javax.crypto.spec.SecretKeySpec;
- import org.apache.commons.codec.binary.Base64;
- import org.apache.commons.lang3.StringUtils;
- import sun.misc.BASE64Decoder;
- /**
- * 编码工具类
- * 实现aes加密、解密
- */
- public class EncryptUtils {
- /**
- * 密钥
- */
- private static final String KEY = "abcdefgabcdefg12";
- /**
- * 算法
- */
- private static final String ALGORITHMSTR = "AES/ECB/PKCS5Padding";
- public static void main(String[] args) throws Exception {
- String content = "我爱你";
- System.out.println("加密前:" + content);
- System.out.println("加密密钥和解密密钥:" + KEY);
- String encrypt = aesEncrypt(content, KEY);
- System.out.println("加密后:" + encrypt);
- String decrypt = aesDecrypt(encrypt, KEY);
- System.out.println("解密后:" + decrypt);
- }
- /**
- * aes解密
- * @param encrypt 内容
- * @return
- * @throws Exception
- */
- public static String aesDecrypt(String encrypt) throws Exception {
- return aesDecrypt(encrypt, KEY);
- }
- /**
- * aes加密
- * @param content
- * @return
- * @throws Exception
- */
- public static String aesEncrypt(String content) throws Exception {
- return aesEncrypt(content, KEY);
- }
- /**
- * 将byte[]转为各种进制的字符串
- * @param bytes byte[]
- * @param radix 可以转换进制的范围,从Character.MIN_RADIX到Character.MAX_RADIX,超出范围后变为10进制
- * @return 转换后的字符串
- */
- public static String binary(byte[] bytes, int radix){
- return new BigInteger(1, bytes).toString(radix);// 这里的1代表正数
- }
- /**
- * base 64 encode
- * @param bytes 待编码的byte[]
- * @return 编码后的base 64 code
- */
- public static String base64Encode(byte[] bytes){
- return Base64.encodeBase64String(bytes);
- }
- /**
- * base 64 decode
- * @param base64Code 待解码的base 64 code
- * @return 解码后的byte[]
- * @throws Exception
- */
- public static byte[] base64Decode(String base64Code) throws Exception{
- return StringUtils.isEmpty(base64Code) ? null : new BASE64Decoder().decodeBuffer(base64Code);
- }
- /**
- * AES加密
- * @param content 待加密的内容
- * @param encryptKey 加密密钥
- * @return 加密后的byte[]
- * @throws Exception
- */
- public static byte[] aesEncryptToBytes(String content, String encryptKey) throws Exception {
- KeyGenerator kgen = KeyGenerator.getInstance("AES");
- kgen.init(128);
- Cipher cipher = Cipher.getInstance(ALGORITHMSTR);
- cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(encryptKey.getBytes(), "AES"));
- return cipher.doFinal(content.getBytes("utf-8"));
- }
- /**
- * AES加密为base 64 code
- * @param content 待加密的内容
- * @param encryptKey 加密密钥
- * @return 加密后的base 64 code
- * @throws Exception
- */
- public static String aesEncrypt(String content, String encryptKey) throws Exception {
- return base64Encode(aesEncryptToBytes(content, encryptKey));
- }
- /**
- * AES解密
- * @param encryptBytes 待解密的byte[]
- * @param decryptKey 解密密钥
- * @return 解密后的String
- * @throws Exception
- */
- public static String aesDecryptByBytes(byte[] encryptBytes, String decryptKey) throws Exception {
- KeyGenerator kgen = KeyGenerator.getInstance("AES");
- kgen.init(128);
- Cipher cipher = Cipher.getInstance(ALGORITHMSTR);
- cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(decryptKey.getBytes(), "AES"));
- byte[] decryptBytes = cipher.doFinal(encryptBytes);
- return new String(decryptBytes);
- }
- /**
- * 将base 64 code AES解密
- * @param encryptStr 待解密的base 64 code
- * @param decryptKey 解密密钥
- * @return 解密后的string
- * @throws Exception
- */
- public static String aesDecrypt(String encryptStr, String decryptKey) throws Exception {
- return StringUtils.isEmpty(encryptStr) ? null : aesDecryptByBytes(base64Decode(encryptStr), decryptKey);
- }
- }
js代码
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>aes测试</title>
- <script type="text/javascript" src="aes.js"></script>
- <script type="text/javascript" src="../components/mode-ecb.js"></script>
- </head>
- <body>
- </body>
- <script type="text/javascript">
- function Encrypt(word){
- var key = CryptoJS.enc.Utf8.parse("abcdefgabcdefg12");
- var srcs = CryptoJS.enc.Utf8.parse(word);
- var encrypted = CryptoJS.AES.encrypt(srcs, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7});
- return encrypted.toString();
- }
- function Decrypt(word){
- var key = CryptoJS.enc.Utf8.parse("abcdefgabcdefg12");
- var decrypt = CryptoJS.AES.decrypt(word, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7});
- return CryptoJS.enc.Utf8.stringify(decrypt).toString();
- }
- alert(Encrypt("我爱你"));
- alert(Decrypt(Encrypt("我爱你")))
- </script>
- </html>
注意点
- js中需要引入CryptoJS的架包,下载地址:点击跳转地址
- 使用aes时,js代码不要暴漏在外面,不然key会被拿到
- PKCS5Padding和PKCS7Padding的结果是一样
-
顶
- 4
-
踩