自己写的AES加密工具类的加密结果为什么与在线AES加密网站的加密结果不一致?
我写了一个AES加密工具类,对明文进行AES加密,相关参数如下:
加密算法:AES
明文:A
算法模式:CBC
密钥长度:256
密钥:1qaz@WSX1qaz@WSX
密钥偏移量:1234567890123456
补码方式:PKCS7Padding
加密结果编码方式:base64
我的加密结果是:WP58v5NfB+3Eo72KBAabGw==
网站上的加密结果是:5CqrZd+/SANPAEF3+Y9XfFKcsC99XywOmJUlRVehFb8=
不知2个结果哪个正确?如果是我的结果不正确,请问问题出在哪?
附AES加密工具类代码:
package com.demo.aes.util; import java.io.UnsupportedEncodingException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.security.Security; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.DecoderException; import org.bouncycastle.jce.provider.BouncyCastleProvider; public class AESUtils { private static final String PWD = "1qaz@WSX1qaz@WSX"; private static final String IV = "1234567890123456"; public static SecretKeySpec makeKey() throws NoSuchAlgorithmException, UnsupportedEncodingException, DecoderException { Security.addProvider(new BouncyCastleProvider()); KeyGenerator kgen = KeyGenerator.getInstance("AES"); kgen.init(256, new SecureRandom(PWD.getBytes("UTF-8"))); SecretKey key = kgen.generateKey(); SecretKeySpec keySpec = new SecretKeySpec(key.getEncoded(), "AES"); // SecretKeySpec keySpec = new SecretKeySpec(PWD.getBytes("UTF-8"), // "AES"); return keySpec; } public static IvParameterSpec makeIv() throws UnsupportedEncodingException, DecoderException { return new IvParameterSpec(IV.getBytes("UTF-8")); } /** * 加密 * * @param content * 需要加密的内容 * @param password * 加密密码 * @return */ public static byte[] encrypt(String content) { try { Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding"); cipher.init(Cipher.ENCRYPT_MODE, makeKey(), makeIv()); return cipher.doFinal(content.getBytes("utf-8")); } catch (Exception e) { e.printStackTrace(); } return null; } /** * 解密 * * @param content * 待解密内容 * @param password * 解密密钥 * @return */ public static byte[] decrypt(byte[] content, String password) { try { Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding"); cipher.init(Cipher.DECRYPT_MODE, makeKey(), makeIv()); return cipher.doFinal(content); } catch (Exception e) { e.printStackTrace(); } return null; } public static void main(String[] args) throws UnsupportedEncodingException { String content = "A"; System.out.println("TLV加密前:" + content); byte[] encryptResult = encrypt(content); System.out.println("Base64加密后:" + BASE64Utils.encode(encryptResult)); }
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
密码才16字节,32位才能创建AES 256。
加密内容也才1字节,最好也先自己补成32字节的再试。
两个都不对。