MST

星途 面试题库

面试题:Kotlin中如何使用加密库进行简单字符串加密

假设你要对一个字符串进行加密,在Kotlin项目中引入了常见的加密库(如Bouncy Castle),请简述实现步骤并给出核心代码示例。
37.7万 热度难度
编程语言Kotlin

知识考点

AI 面试

面试题答案

一键面试

实现步骤

  1. 添加依赖:在build.gradle.kts文件中添加Bouncy Castle库的依赖。例如:
implementation("org.bouncycastle:bcprov-jdk15on:1.70")
  1. 初始化加密算法:选择合适的加密算法,如AES。
  2. 生成密钥:根据所选算法生成对应的密钥。
  3. 创建加密对象并初始化:使用密钥初始化加密对象。
  4. 执行加密操作:对字符串进行加密。

核心代码示例

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()
}