实现步骤
- 添加依赖:在
build.gradle.kts
文件中添加Bouncy Castle库的依赖。例如:
implementation("org.bouncycastle:bcprov-jdk15on:1.70")
- 初始化加密算法:选择合适的加密算法,如AES。
- 生成密钥:根据所选算法生成对应的密钥。
- 创建加密对象并初始化:使用密钥初始化加密对象。
- 执行加密操作:对字符串进行加密。
核心代码示例
import org.bouncycastle.jce.provider.BouncyCastleProvider
import java.security.Security
import javax.crypto.Cipher
import javax.crypto.KeyGenerator
import javax.crypto.SecretKey
import javax.crypto.spec.IvParameterSpec
import javax.crypto.spec.SecretKeySpec
fun main() {
// 添加Bouncy Castle作为安全提供程序
Security.addProvider(BouncyCastleProvider())
// 待加密字符串
val plainText = "Hello, World!"
// 生成密钥
val key = generateKey()
// 加密
val encryptedText = encrypt(plainText, key)
println("Encrypted Text: ${bytesToHex(encryptedText)}")
// 解密
val decryptedText = decrypt(encryptedText, key)
println("Decrypted Text: $decryptedText")
}
fun generateKey(): SecretKey {
val keyGen = KeyGenerator.getInstance("AES", "BC")
keyGen.init(256)
return keyGen.generateKey()
}
fun encrypt(plainText: String, key: SecretKey): ByteArray {
val cipher = Cipher.getInstance("AES/CBC/PKCS7Padding", "BC")
val iv = ByteArray(cipher.blockSize)
val ivSpec = IvParameterSpec(iv)
cipher.init(Cipher.ENCRYPT_MODE, key, ivSpec)
return cipher.doFinal(plainText.toByteArray())
}
fun decrypt(encryptedText: ByteArray, key: SecretKey): String {
val cipher = Cipher.getInstance("AES/CBC/PKCS7Padding", "BC")
val iv = ByteArray(cipher.blockSize)
val ivSpec = IvParameterSpec(iv)
cipher.init(Cipher.DECRYPT_MODE, key, ivSpec)
val decrypted = cipher.doFinal(encryptedText)
return String(decrypted)
}
fun bytesToHex(bytes: ByteArray): String {
val hexChars = "0123456789ABCDEF"
val result = StringBuilder()
for (b in bytes) {
result.append(hexChars[(b.toInt() and 0xF0) shr 4])
result.append(hexChars[b.toInt() and 0x0F])
}
return result.toString()
}