操作字节数组,同时仍然保留一些字节
manipluate bytearray, while still preserving some bytes
我需要对 kotlin 字节数组进行一些加密,同时仍保留前 138 个字节。
您好,我已经使用 bouncycastle 创建了一个加密函数,该函数能够加密字节数组和 return 密文。
我现在有一个非常长的密码,我需要保留前 138 个字节,然后加密其余部分。
我的加密和密钥生成函数如下所示:
fun genKey() : SecretKey{
val keyBytes : ByteArray = ByteArray(keylength)
random.nextBytes(keyBytes)
val keyspec : SecretKeySpec = SecretKeySpec(keyBytes, "AES")
return keyspec
}
fun enc(plaintext : String, key : SecretKey) : ByteArray{
val cipher : Cipher = Cipher.getInstance("AES/ECB/PKCS7Padding", "BCFIPS")
val IVstr : String = "0123456789abcdef";
val IV = IVstr.toByteArray()
cipher.init(Cipher.ENCRYPT_MODE, key)
return cipher.doFinal(plaintext.toByteArray())
}
我有这个驱动代码
Security.addProvider(BouncyCastleFipsProvider())
val file = File("C:\files\IMagefile.bmp").readBytes()
val cryptFile = encb(file, key)
这只是给了我字节数组“cryptfile”。现在,如前所述,我希望不加密前 138 个。
easiest/best 的方法是什么?我是否必须将“文件”明文拆分成多个部分并将它们粘合在一起?或者我可以用更聪明的方式来做吗?
直截了当split/glue比较方便,何乐而不为呢?
//element at index goes to second array
fun ByteArray.splitAtIndex(index : Int) = copyOf(index) to copyOfRange(index, size)
val (prefix, text) = plaintext.toByteArray().splitAtIndex(138)
val cipher = Cipher.getInstance("AES/ECB/PKCS7Padding", "BCFIPS").also { it.init(Cipher.ENCRYPT_MODE, key) }
val result: ByteArray = prefix + cipher.doFinal(text)
我需要对 kotlin 字节数组进行一些加密,同时仍保留前 138 个字节。
您好,我已经使用 bouncycastle 创建了一个加密函数,该函数能够加密字节数组和 return 密文。 我现在有一个非常长的密码,我需要保留前 138 个字节,然后加密其余部分。 我的加密和密钥生成函数如下所示:
fun genKey() : SecretKey{
val keyBytes : ByteArray = ByteArray(keylength)
random.nextBytes(keyBytes)
val keyspec : SecretKeySpec = SecretKeySpec(keyBytes, "AES")
return keyspec
}
fun enc(plaintext : String, key : SecretKey) : ByteArray{
val cipher : Cipher = Cipher.getInstance("AES/ECB/PKCS7Padding", "BCFIPS")
val IVstr : String = "0123456789abcdef";
val IV = IVstr.toByteArray()
cipher.init(Cipher.ENCRYPT_MODE, key)
return cipher.doFinal(plaintext.toByteArray())
}
我有这个驱动代码
Security.addProvider(BouncyCastleFipsProvider())
val file = File("C:\files\IMagefile.bmp").readBytes()
val cryptFile = encb(file, key)
这只是给了我字节数组“cryptfile”。现在,如前所述,我希望不加密前 138 个。 easiest/best 的方法是什么?我是否必须将“文件”明文拆分成多个部分并将它们粘合在一起?或者我可以用更聪明的方式来做吗?
直截了当split/glue比较方便,何乐而不为呢?
//element at index goes to second array
fun ByteArray.splitAtIndex(index : Int) = copyOf(index) to copyOfRange(index, size)
val (prefix, text) = plaintext.toByteArray().splitAtIndex(138)
val cipher = Cipher.getInstance("AES/ECB/PKCS7Padding", "BCFIPS").also { it.init(Cipher.ENCRYPT_MODE, key) }
val result: ByteArray = prefix + cipher.doFinal(text)