android - 密钥对 RSA 安卓
问题描述
在所有 android 应用程序周期中只为 RSA 加密创建一个密钥对的最佳做法是什么?我只想创建一次公钥和私钥,然后随时使用它。
解决方案
是的,您应该使用您的别名键创建一次,下次创建新的密钥库对象之前,您应该检查密钥库中是否已经存在相同的别名。如果密钥库中不存在别名,那么您应该创建新对象。您也可以使用以下代码进行检查。
class AndroidKeyStore {
companion object {
private val CIPHER_TYPE = "RSA/ECB/PKCS1Padding"
private val CIPHER_PROVIDER = "AndroidOpenSSL"
private var keyStore: KeyStore? = null
const val KEY_ALIAS = "Keyalaisasfd"
}
init {
try {
keyStore = KeyStore.getInstance("AndroidKeyStore")
keyStore?.load(null)
generateKey()
} catch (ex: Exception) {
}
}
@Throws(Exception::class)
private fun generateKey() {
// Create new key if needed
if (keyStore != null) {
if (!keyStore!!.containsAlias(KEY_ALIAS)) {
val kpg: KeyPairGenerator =
KeyPairGenerator.getInstance(KeyProperties.KEY_ALGORITHM_RSA, "AndroidKeyStore")
val parameterSpec: KeyGenParameterSpec = KeyGenParameterSpec.Builder(
KEY_ALIAS,
KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT
)
.setBlockModes(KeyProperties.BLOCK_MODE_GCM)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_RSA_PKCS1)
.build()
kpg.initialize(parameterSpec)
kpg.generateKeyPair()
}
}
}
}
推荐阅读
- css - 是否有可能在 NW.js 应用程序中获得本机 Windows 菜单栏,或者至少为它们设置样式?
- java - 对于带有数组列表的每个循环,返回排序后的数组,但不返回通过添加值来更改数组列表
- javascript - 如何在 JavaScript 中添加两个数字?
- javascript - Array(SIZE).fill(1):时间增加 500 倍,内存增加 70 倍,数据增加 10 倍
- reactjs - TypeError:this.props.changeUser 不是函数
- javascript - 图像未显示在服务器上,但在节点 js 中的 localhost 上工作正常
- python - 未正确设置 stderr 是我的程序中缺少输出的原因。除了猜测之外,有没有合适的方法来找出这个原因?
- ruby-on-rails - rails webpacker.yml not found,为什么这会显示在新的设置应用程序中?
- python - 将 json 对象中的特定名称-值对顺序附加到 csv 文件
- rcpp - R::runif() 和 Rcpp::runif() 之间的区别