面试题答案
一键面试1. 自定义轻量级加密算法设计与实现
以下是一个简单的基于异或运算的自定义轻量级加密算法示例:
class SimpleXorCipher(private val key: ByteArray) {
fun encrypt(data: ByteArray): ByteArray {
val encrypted = ByteArray(data.size)
for (i in data.indices) {
encrypted[i] = data[i] xor key[i % key.size]
}
return encrypted
}
fun decrypt(encryptedData: ByteArray): ByteArray {
return encrypt(encryptedData) // 异或加密解密操作相同
}
}
2. 结合Kotlin语言特性强化代码安全性
不可变数据
- 使用
val
声明变量:在上述代码中,key
声明为private val
,确保密钥在对象创建后不可变,防止在运行过程中密钥被意外修改导致安全风险。 - 不可变集合:如果算法涉及集合操作,优先使用Kotlin的不可变集合,如
listOf()
、setOf()
等创建不可变的列表和集合,避免数据被篡改。
空安全
- 明确的空值处理:在函数参数和返回值中,使用可空类型声明(
?
)和非空断言(!!
),或者使用let
、takeIf
等函数安全地处理可能为空的值。例如,如果encrypt
和decrypt
函数的参数可能为空,可以这样处理:
fun encrypt(data: ByteArray?): ByteArray? {
data?.let {
val encrypted = ByteArray(data.size)
for (i in data.indices) {
encrypted[i] = data[i] xor key[i % key.size]
}
return encrypted
}
return null
}
- 安全调用操作符(
?.
):在可能为空的对象调用方法时,使用安全调用操作符,防止NullPointerException
。比如,如果算法中有对象链调用,如obj1?.obj2?.method()
,只有当obj1
和obj2
都不为空时才会调用method()
。