一个用于Android AES加密解密的工具类,记录一下。。。
import android.os.Build import android.security.keystore.KeyGenParameterSpec import android.security.keystore.KeyProperties import android.util.Base64 import androidx.annotation.RequiresApi import java.io.* import java.security.KeyStore import javax.crypto.Cipher import javax.crypto.KeyGenerator import javax.crypto.SecretKey import javax.crypto.spec.IvParameterSpec @RequiresApi(Build.VERSION_CODES.M) class CryptoManager {
companion object {
private const val IV_BLOCK_SIZE = 16 private const val ALGORITHM = KeyProperties.KEY_ALGORITHM_AES private const val BLOCK_MODE = KeyProperties.BLOCK_MODE_CBC private const val PADDING = KeyProperties.ENCRYPTION_PADDING_PKCS7 private const val TRANSFORMATION = "$ALGORITHM/$BLOCK_MODE/$PADDING" private const val KeyStoreType = "AndroidKeyStore" private const val KEY_ALIAS = "SecretKeyAlias" private val cipher = Cipher.getInstance(TRANSFORMATION) //创建密码器 fun encrypt(encryptBytes: ByteArray): ByteArray?{
try {
cipher.init(Cipher.ENCRYPT_MODE, getKey()) //用密钥初始化Cipher对象 val final = cipher.doFinal(encryptBytes) return cipher.iv + final // iv占前16位,加密后的数据占后面 } catch (e: Exception) {
e.printStackTrace() } return null } fun decrypt(decryptBytes: ByteArray): ByteArray? {
try {
val iv = decryptBytes.copyOfRange(0, IV_BLOCK_SIZE) // 先取出IV val decryptData = decryptBytes.copyOfRange(IV_BLOCK_SIZE, decryptBytes.size) // 取出加密后的数据 cipher.init(Cipher.DECRYPT_MODE, getKey(), IvParameterSpec(iv)) return cipher.doFinal(decryptData) } catch (e: Exception) {
e.printStackTrace() } return null } // type设为"AndroidKeyStore"使用Android专门提供的密钥存储系统,可以根据别名获取key, 类似于sp private val keyStore = KeyStore.getInstance(KeyStoreType).apply {
load(null) } private
今天的文章
Android AES加密解密工具类分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/102244.html