【问题标题】:Where to specify key and IV value when doing AES encryption/decryption in Android?在 Android 中进行 AES 加密/解密时在哪里指定密钥和 IV 值?
【发布时间】:2015-02-14 17:23:14
【问题描述】:

我正在研究 android 中的 AES 加密和解密。我有一个使用 AES/CBC 加密的音频文件。我有钥匙和 IV(初始化向量)。

我已经阅读了一些链接。来自this

SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");

使用的 SecretkeySpec 类。我应该在哪里使用我的密钥和 IV 值?

我只需要解密前 256 个字节的数据。我怎样才能做到这一点?

【问题讨论】:

    标签: android encryption aes aescryptoserviceprovider


    【解决方案1】:

    在您的代码 sn-p 中,raw 是您的密钥(作为字节数组):

    SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
    //                                         ^^^ this is your key
    

    当然,如果您的密钥是十六进制字符串,则需要convert it to bytes

    加密时,您可以自己指定一个 IV,也可以随机生成一个。如果您想指定自己,请使用:

    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); // adjust padding
    cipher.init(Cipher.ENCRYPT_MODE, skeySpec, new IvParameterSpec(...));
    

    如果你想使用自动的,请务必通过调用记录选择了哪一个

    cipher.getIV();
    

    对于解密,您必须指定 IV,并且使用 IvParameterSpec 来执行此操作,就像加密一样。

    我只需要解密前 256 个字节的数据。我怎样才能做到这一点?

    考虑使用 CipherInputStream 并从中仅读取 256 个字节。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-21
      • 2018-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-14
      相关资源
      最近更新 更多