栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【Android,加解密】AESUtil加密(Base64,AES嵌套双层加密)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Android,加解密】AESUtil加密(Base64,AES嵌套双层加密)

AESUtil加密: base64,AES嵌套双层加密

crazy code (kotlin)

object AESUtil {
    //加密算法
    private const val KEY_ALGORITHM = "AES"

    //AES 的 密钥长度,32 字节,范围:16 - 32 字节
    private const val SECURE_KEY_LENGTH = 16

    //秘钥长度不足 16 个字节时,默认填充位数
    private const val DEFAULT_VALUE = "0"

    //字符编码
    @RequiresApi(Build.VERSION_CODES.KITKAT)
    private val CHARSET_UTF8 = StandardCharsets.UTF_8

    //加解密算法/工作模式/填充方式
    private const val CIPHER_ALGORITHM = "AES/CBC/PKCS5Padding"

    //key
    private const val SECURE_KEY = "xxxxxForTodo_Key"

    //IV
    private const val IV_STRING = "xxxxxForTodo_Iv"

    
    @RequiresApi(Build.VERSION_CODES.KITKAT)
    fun encrypt(content: String): String? {
        try {
            // 获得密匙数据
            val rawKeyData = getAESKey(SECURE_KEY)
            // 从原始密匙数据创建KeySpec对象
            val key = SecretKeySpec(rawKeyData, KEY_ALGORITHM)
            // Cipher对象实际完成加密操作
            val cipher = Cipher.getInstance(CIPHER_ALGORITHM)
            // 用密匙初始化Cipher对象
            val ivParameterSpec = IvParameterSpec(IV_STRING.toByteArray())
            cipher.init(Cipher.ENCRYPT_MODE, key, ivParameterSpec)
            // 正式执行加密操作
            val encryptByte = cipher.doFinal(content.toByteArray())
            return base64.encodeToString(encryptByte, base64.NO_WRAP)
        } catch (e: UnsupportedEncodingException) {
            e.printStackTrace()
        } catch (e: NoSuchAlgorithmException) {
            e.printStackTrace()
        } catch (e: NoSuchPaddingException) {
            e.printStackTrace()
        } catch (e: InvalidAlgorithmParameterException) {
            e.printStackTrace()
        } catch (e: InvalidKeyException) {
            e.printStackTrace()
        } catch (e: IllegalBlockSizeException) {
            e.printStackTrace()
        } catch (e: BadPaddingException) {
            e.printStackTrace()
        }
        return null
    }

    
    @RequiresApi(Build.VERSION_CODES.KITKAT)
    fun decrypt(content: String, secureKey: String): String? {
        val data: ByteArray = base64.decode(content, base64.NO_WRAP)
        try {
            // 获得密匙数据
            val rawKeyData = getAESKey(secureKey) // secureKey.getBytes();
            // 从原始密匙数据创建一个KeySpec对象
            val key = SecretKeySpec(rawKeyData, KEY_ALGORITHM)
            // Cipher对象实际完成解密操作
            val cipher = Cipher.getInstance(CIPHER_ALGORITHM)
            // 用密匙初始化Cipher对象
            val initParam = IV_STRING.toByteArray()
            val ivParameterSpec = IvParameterSpec(initParam)
            cipher.init(Cipher.DECRYPT_MODE, key, ivParameterSpec)
            return String(cipher.doFinal(data), CHARSET_UTF8)
        } catch (e: UnsupportedEncodingException) {
            e.printStackTrace()
        } catch (e: NoSuchAlgorithmException) {
            e.printStackTrace()
        } catch (e: NoSuchPaddingException) {
            e.printStackTrace()
        } catch (e: InvalidKeyException) {
            e.printStackTrace()
        } catch (e: InvalidAlgorithmParameterException) {
            e.printStackTrace()
        } catch (e: IllegalBlockSizeException) {
            e.printStackTrace()
        } catch (e: BadPaddingException) {
            e.printStackTrace()
        }
        return null
    }

    @RequiresApi(Build.VERSION_CODES.KITKAT)
    @Throws(UnsupportedEncodingException::class)
    fun getAESKey(key: String): ByteArray {
        val keyBytes: ByteArray = key.toByteArray(CHARSET_UTF8)
        val keyBytes16 = ByteArray(SECURE_KEY_LENGTH)
        System.arraycopy(
            keyBytes, 0, keyBytes16, 0,
            keyBytes.size.coerceAtMost(SECURE_KEY_LENGTH)
        )
        return keyBytes16
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/463174.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号