AES加密及在Android中的使用

1.AES简介

高级加密标准(AES,Advanced Encryption Standard),是最常见的对称加密算法,对称加密是指加密和解密使用相同的密钥,加密解密过程如下:

AES加密解密过程.png

2.在Android中使用AES

AES共有5种加密模式:

  • ECB模式(电码本模式)
  • CBC模式(密码分组链接模式)
  • CTR(计算器模式)
  • CFB(密码反馈模式)
  • OFB(输出反馈模式)

比较常用的是ECB和CBC模式,除密钥外,CBC模式可额外传入一个偏移量(iv值)进行加密,增强了加密算法强度。
Android中已内置了AES加解密支持,示例代码如下:

  • AES加密
    /**
     * AES加密,返回BASE64编码后的加密字符串
     *
     * @param sSrc           -- 待加密内容
     * @param encodingFormat -- 字符串编码方式
     * @param algorithm      -- 使用的算法 算法/模式/补码方式, 目前支持ECB和CBC模式
     * @param sKey           -- 加密密钥
     * @param ivParameter    -- 偏移量,CBC模式时需要
     * @return Base64编码后的字符串
     * @throws Exception
     */
    public static String aesEncrypt(String sSrc, String encodingFormat, String algorithm, String sKey, String ivParameter) throws Exception {
        Cipher cipher = Cipher.getInstance(algorithm);
        byte[] raw = sKey.getBytes(encodingFormat);
        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
        //使用CBC模式,需要一个向量iv,可增加加密算法的强度
        IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes(encodingFormat));
        if (algorithm.contains("CBC")) {
            cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
        } else {
            cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
        }
        byte[] encrypted = cipher.doFinal(sSrc.getBytes(encodingFormat));
        //此处使用BASE64做转码。
        return EnDecryptionUtil.base64Encode(encrypted);
    }
  • AES解密
    /**
     * AES解密
     * @param sSrc -- 待解密Base64字符串
     * @param encodingFormat -- 字符串编码方式
     * @param algorithm -- 使用的算法 算法/模式/补码方式, 目前支持ECB和CBC模式
     * @param sKey -- 加密密钥
     * @param ivParameter -- 偏移量,CBC模式时需要
     * @return 解密后的字符串
     * @throws Exception
     */
    public static String aesDecrypt(String sSrc, String encodingFormat, String algorithm, String sKey, String ivParameter) throws Exception {
        byte[] raw = sKey.getBytes(encodingFormat);
        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
        Cipher cipher = Cipher.getInstance(algorithm);
        IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes(encodingFormat));
        if (algorithm.contains("CBC")) {
            cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
        } else {//ECB模式
            cipher.init(Cipher.DECRYPT_MODE, skeySpec);
        }
        //先用base64解密
        byte[] encrypted1 = EnDecryptionUtil.base64Decode(sSrc);
        byte[] original = cipher.doFinal(encrypted1);
        return new String(original, encodingFormat);
    }

3.示例

加密内容为"123456",密钥为“1234567812345678”,偏移量为“1234567812345678”,加解密方式选择“AES/CBC/PKCS5Padding”,调用结果如下:
AES加密
使用相同的输入参数进行解密,调用结果如下:
AES解密
另外,还可以在网站在线AES加密解密进行验证


参考资料
AES加密算法的详细介绍与实现

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值