1

I have the following decryption algorithm implemented in Java. Is information "AES128" enough for other people to implement it in other languages or a more accurate definition is required?

  // 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);
4

3 回答 3

4

加密算法本身的名称是 AES-128。它用于密码块链接模式(这描述了如何连接多个顺序块的加密),带有PKCS #5 填充(这描述了如何将消息填充到完整块的大小)。其他语言可能有不同的技术来指定模式和填充。

于 2013-11-06T14:52:51.180 回答
0

AES 是算法,128 位是密钥大小。我会说这很清楚......

于 2013-11-06T14:55:40.847 回答
0

该算法的基本属性是:

  1. AES
  2. 128 位密钥
  3. CBC块
  4. PKCS-5 又名 PKCS-7

还使用了以下自定义策略:

  1. 从使用的密码短语自定义 IV 生成(不良风格)
  2. 从密码短语生成自定义密钥

改变任何一点,都会改变一切:生成的字节和解密代码。

于 2013-11-15T13:05:51.440 回答