java - Java AES解密十六进制
问题描述
我正在做一个项目,我需要在 Java 中解密 AES 加密。为了测试,我使用了一个在线计算器来加密“Hello World”,密钥为“0123456789ABCDEF”和一个空的IV“0000000000000000”。我在用 Java 解密它时遇到问题。
String keyHex = "0123456789ABCDEF";
String ivHex = "0000000000000000";
String inputHex = "ED488015821C37D59CBA611B19A8EAF3";
// Hex to byte arrays
var keyBytes = hexToByte(keyHex);
var inputBytes = hexToByte(inputHex);
var ivBytes = hexToByte(ivHex);
// Add padding to key
var paddingKey = new byte[16];
System.arraycopy(keyBytes, 0, paddingKey,0, keyBytes.length);
// Add padding to iv
var paddingIV = new byte[16];
System.arraycopy(ivBytes, 0, paddingIV,0, ivBytes.length);
IvParameterSpec ivSpec = new IvParameterSpec(paddingIV);
SecretKeySpec keySpec = new SecretKeySpec(paddingKey, "AES");
String alg = "AES/CBC/NoPadding";
Cipher cipher = Cipher.getInstance(alg);
cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
byte[] original = cipher.doFinal(inputBytes);
System.out.println(Arrays.toString(original));
String s = new String(original);
System.out.println("Decrypted: " + s);
它给出了错误的输出: 输出
我的一个猜测是我对键/IV 使用了错误的填充,但是如果我没有添加填充,它会抱怨键的长度不正确。
谁能发现我的错误?
解决方案
推荐阅读
- javascript - Express 路由错误,'Router.post 需要回调函数'
- php - PHP循环在本地主机上工作,但在服务器上
- r - Caret 包不适用于 3.4.2 版
- c# - .NET 浮点运算在 x64 调试和发布之间是否一致?
- c - 无法在 c 和 excel 中获得相同的答案并具有相同的功能
- swift - 通过 Vapor Fluent-MySQL 中的迁移更改 VARCHAR 字段
- swift - 如何将 Int8 转换为字符?
- sql - “开”左连接顺序
- oop - 使用数据库查找从另一种类型的对象创建一种类型的对象
- javascript - JSON 无法将对象解组为字符串类型的 GO 值