pri*_*ank 4 encryption android cryptography kotlin
我在 Kotlin 中使用“CBC”模式和“PKCS5Padding”填充实现了“AES”加密和解密。我注意到解密时cipherInputStream.read(buffer)
一次仅读取 512 字节,而不是 8192 字节的完整缓冲区大小。这是为什么?加密时它使用整个缓冲区。
这些是我正在使用的常量,
private val TRANSFORMATION = "AES/CBC/PKCS5Padding"
private var SECRET_KEY_FAC_ALGORITHM = "PBKDF2WithHmacSHA1"
private val SECRET_KEY_SPEC_ALGORITHM = "AES"
private val cipher = Cipher.getInstance(TRANSFORMATION)
private val random = SecureRandom()
private val KEY_BITS_LENGTH = 256
private val IV_BYTES_LENGTH = cipher.blockSize
private val SALT_BYTES_LENGTH = KEY_BITS_LENGTH / 8
private val ITERATIONS = 10000
Run Code Online (Sandbox Code Playgroud)
解密代码
cis = CipherInputStream(input, cipher)
val buffer = ByteArray(8192)
var read = cis.read(buffer)
while (read > -1) {
fos.write(buffer, 0, read)
read = cis.read(buffer)
}
Run Code Online (Sandbox Code Playgroud)
加密代码
fos.write(iv)
fos.write(salt)
cos = CipherOutputStream(fos, cipher)
val buffer = ByteArray(8192)
var read = input.read(buffer)
while (read > -1) {
cos.write(buffer, 0, read)
read = input.read(buffer)
}
Run Code Online (Sandbox Code Playgroud)
最近我有类似的问题。
问题是 CipherInputStream 类的内部缓冲区,其定义如下
private byte[] ibuffer = new byte[512];
Run Code Online (Sandbox Code Playgroud)
解密速度的显着提高是将缓冲区大小增加到 8192。因此,我只是将原始 CipherInputStream 类复制粘贴到我自己的类中,并修改了缓冲区大小。
有趣的是这个 ibuffer 字段上面的注释。
512 字节的大小是随机选择的 */
希望有帮助
归档时间: |
|
查看次数: |
785 次 |
最近记录: |