密文是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;
}