在Android中进行AES加密/解密时,在哪里指定密钥和IV值?

时间:2014-12-16 11:48:39

标签: android encryption aes aescryptoserviceprovider

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

我看过一些链接。来自this

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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

如果你想使用自动的,请务必记录通过调用

选择哪一个
cipher.getIV();

对于解密,您必须使用IvParameterSpec指定IV,就像使用加密一样。

  

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

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