我在Java中实现了以下解密算法。信息“AES128”是否足以让其他人用其他语言实现它或者需要更准确的定义?
// input data
byte[] secretKey = { ... };
byte[] encryptedData = { ... };
// decryption
SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
random.setSeed(secretKey);
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(128, random);
SecretKey sk = keyGen.generateKey();
SecretKeySpec keySpec = new SecretKeySpec(sk.getEncoded(), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
IvParameterSpec IV16 = new IvParameterSpec(keySpec.getEncoded());
cipher.init(Cipher.DECRYPT_MODE, keySpec, IV16);
byte[] decrypted = cipher.doFinal(encryptedData);
答案 0 :(得分:4)
加密算法本身的名称是AES-128。它在cipher block chaining mode(这描述了如何连接多个连续块的加密)和PKCS #5 padding中使用(这描述了如何将消息填充到完整块的大小)。其他语言可能有不同的技术来指定模式和填充。
答案 1 :(得分:0)
AES是算法,密钥大小为128位。我会说这很清楚......
答案 2 :(得分:0)
该算法的基本属性是:
还使用了以下自定义策略:
更改任何点,更改所有内容:生成的字节数和解密代码。