AES加密(二) — Aes256带偏移量加/解密

前言

在上一节中,我们对AES加密知识做了一个详细的介绍,大家感兴趣的话,可参考以下文章:
AES加密(一) — 详解
今天我们就来介绍下AES加/解密在Android上的运用

今天涉及以下知识:

  1. AES加密在Android上常用模式
  2. 封装类Aes256简介
  3. Aes256在Activity中的使用
  4. 加/解密涉及到的问题
  5. 效果图和项目结构图
  6. Aes256及相关源码

先来波效果图


AES加密(二) — Aes256带偏移量加/解密_第1张图片
效果图.gif

一. AES加密在Android上常用模式

我们在Android开发过程中,也经常会使用到AES加密。但是大多数时候,我们不过是在网上copy一份AES加解密的代码,然后在项目中去验证是否可以正常解密加密方传过来的密文,若可以正常解密,则流程结束。若不能正常解密,则继续百度。虽然多数时候,AES的加解密环节使用起来看似不难,但是一旦出现你找的代码无法正常解析加密方给的密文,则有可能你会花大量时间去寻找合适的代码,还有可能因为这个环节和后台开发人员发生激战。继而发生类似如下对话:

后台开发人员: 一个AES加解密而已,网上到处是代码,有那么难吗?
你:找了,但是不能正常解密啊
后台开发人员: 你到底会不会啊,这么简单的问题。我的这套加解密方法之前可是用了几个项目的啊,到你这里就不行了?
你:我Tm也不是第一次用了,到你这里就就硬是解不出来,你到底怎么加密的啊
后台开发人员: 还能怎么加密,不都是和网上的一样吗?
你:干,看来得打一架了
后台开发人员:菜逼,来就来,谁怕谁?
....

当然了,很多时候,并不是服务端的AES加密有问题,也不是客户端的AES解密有问题。只是 服务端的AES加密 与 客户端的AES解密 不配套而已。这里我们就需要了解AndroidAES加密的常用模式。一般我们在Android开发中用到的多数是AES_256模式 加/解密,为了数据安全性,还会涉及到向量(偏移量)的问题。
为了便于AndroidAES加/解密的使用,这里,我封装了一个工具类— Aes256,下面就来对它做一个基本介绍吧。

二. 封装类Aes256简介

Aes256作为一个AES_256模式的AES加/解密工具类,一般用于Android开发过程中。其作为一个单例类,具备以下基本方法:

    /***
     * 设置加密解密字符集(不设置的话默认字符集为AES.UTF_8)
     *
     * @param charsetName 字符集,一般为 AES.UTF_8 或 AES.GBK
     * @return
     */
    public Aes256 setCharsetName(String charsetName)

    /***
     * 设置填充模式(不设置的话,默认为 AES.CBC_PKCS5PADDING)
     *
     * 注:一般不调用,除非有特别的需要替换填充模式才考虑
     *
     * @return
     */
    public Aes256 setFillModel(String fillModel)

    /***
     * 初始化设置
     *
     * @param key 密钥(长度 >=16 的字符串)
     * @param iv  向量值,字符串
     * @return
     */
    public void init(String key, String iv)

    /***
     * 加密(AES_256)
     *
     * @param value:要加密的字符串
     *
     * @return 加密后的字符串
     */
    @RequiresApi(api = Build.VERSION_CODES.FROYO)
    public String encrypt(String value)

    /***
     * 解密(AES_256)
     *
     * @param strBase64 aes加密后的字符串
     *
     * @return 解密结果
     */
    public String decrypt(String strBase64) 

三. Aes256在Activity中的使用

下面给出Aes256Activity中的使用:

@RequiresApi(api = Build.VERSION_CODES.N)
public class TempActivity extends AppCompatActivity implements View.OnClickListener{

    private TextView mTvTest;
    private Button mBtnTest;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_temp);

        //初始化控件
        initView();
        //初始化数据
        initData();
        //控件监听
        setListener();
    }

    /**
     * 初始化控件
     **/
    private void initView() {
        mTvTest = findViewById(R.id.mTvTest);
        mBtnTest = findViewById(R.id.mBtnTest);
    }

    private void initData() {


    }

    /**
     * 控件监听
     **/
    private void setListener() {
        //点击事件
        mBtnTest.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
         switch (v.getId()) {
             case R.id.mBtnTest:
                 LogUtil.i("======我点击了======");

                 test();
                 break;
             default:
                 break;
         }
    }

    private void test(){
        String message = "中国";
        String key = "46cc793c53dc451b";
        String iv="f%Z4F+qtFh624970";


        //Aes256加密初始化
        Aes256.getInstance()
//                //设置加密模式,一般使用默认,除非对填充模式有特殊要求才设置(不设置的话默认为AES.CBC_PKCS5PADDING)
//                .setFillModel(AES.CBC_PKCS5PADDING)
                .setCharsetName(AES.UTF_8) //设置字符集(不设置的话默认为AES.UTF_8)
                .init(key,iv);//设置私钥,向量(偏移量)

        //Aes256加密
        String enCode256= Aes256.getInstance().encrypt(message);
        LogUtil.i("======Aes256加密结果: enCode256="+enCode256);
        //Aes256解密
        String deCode256= Aes256.getInstance().decrypt(enCode256);
        LogUtil.i("======Aes256解密结果: deCode256="+deCode256);

        String info = "加密前字符串: " + message + "\n"
                + "加密后的结果: " + enCode256 + "\n"
                + "解密后的结果: " + deCode256;
         mTvTest.setText(info);

    }

}

四. 加/解密涉及到的问题

加/解密过程中出现问题的话,大家可参考我第一篇文章
AES加密(一) — 详解
中第四项关于AES加密/解密注意的问题的描述,这个可以帮助你快速排查问题,顺利实现AES加/解 密功能。

五.效果图和项目结构图

AES加密(二) — Aes256带偏移量加/解密_第2张图片
效果图.gif
AES加密(二) — Aes256带偏移量加/解密_第3张图片
项目结构图.png

六.Aes256及相关源码

下面给出Aes256工具源码:

你可能感兴趣的:(AES加密(二) — Aes256带偏移量加/解密)