AES/ECB/NoPadding 秘钥256位 密文16进制 解密老是乱码小白求解求解

gggggggboy 2019-03-19 05:52:20
密文是c自带的函数void AES_encrypt(const unsigned char *in, unsigned char *out, const AES_KEY *key)加密的,不是很懂c

public static void main(String[] args) {
try {
System.out.println(decrypt(
"d117a2c889b728e123e7ac2bb933a29851a0a53d3f8ff70ed604d26538a8585a",
"c9539dacbe89eec252afa703f28ef06a"));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


public static String decrypt(String encrypted, String token) throws Exception{
byte[] key = toBytes(token);
byte[] encryptedBytes = toBytes(encrypted);
String decrypted = decryptBytes(encryptedBytes,key);
return decrypted;
}


public static byte[] toBytes(String s) {
int len = s.length();
byte[] data = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
+ Character.digit(s.charAt(i + 1), 16));
}
return data;
}



private static String decryptBytes(byte[] encrypted, byte[] key) throws Exception{
// 判断Key是否正确
if (key == null) {
return null;
}
// 判断Key是否为16位
if (key.length != 16) {
return null;
}
KeyGenerator kgen = KeyGenerator.getInstance("AES");
SecureRandom securerandom = new SecureRandom(key);
kgen.init(256, securerandom);
SecretKey secretKey = kgen.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
SecretKeySpec skeySpec = new SecretKeySpec(enCodeFormat, "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
byte[] original = cipher.doFinal(encrypted);
String originalString = new String(original, "utf-8");
return originalString;

}
...全文
856 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
gggggggboy 2019-03-20
  • 打赏
  • 举报
回复
哪位大神回复一下,要沉啦
gggggggboy 2019-03-20
  • 打赏
  • 举报
回复
哪位大神回复一下,要沉啦

50,528

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧