Android中的AES加密算法解析

来源:互联网 发布:淘宝物流业务流程图 编辑:程序博客网 时间:2024/05/18 23:26

概述:

高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。AES加密是可逆的,加密解密需要同一把钥匙。

使用,看代码:

public class AESActivity extends AppCompatActivity {    private EditText editText ;    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView( R.layout.esk_activity_layout);        editText = (EditText) findViewById( R.id.asx_action_et) ;    }    /**     *生产成钥匙     * @param view     */    public void yaoshi(View view) throws Exception {        //通过AES的key生成器生成一个密钥(加密解密都是通过这个钥匙)        SecretKey sk = KeyGenerator.getInstance("AES").generateKey() ;        File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) , "key.sys") ;        FileOutputStream fos = new FileOutputStream( file ) ;        ObjectOutputStream obo = new ObjectOutputStream( fos ) ;        obo.writeObject( sk ) ;        obo.flush() ;    }    /**     * 加密     * @param view     */    public void encode(View view) throws Exception {        //得到加密的key对象        File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),"key.sys");        SecretKey key = (SecretKey) new ObjectInputStream(new FileInputStream(file)).readObject();        //获取加密工具        Cipher cipher = Cipher.getInstance("AES");        //初始化加密工具        cipher.init(Cipher.ENCRYPT_MODE,key);        //放入我们要加密的内容 并加密        byte[] bytes = cipher.doFinal(editText.getText().toString().getBytes());        //得到的字节在进行Base64换算        byte[] base = Base64.encode(bytes,Base64.DEFAULT);        String text = new String(base);        editText.setText(text);    }    /**     * 解密     * @param view     */    public void deCode(View view) throws Exception {        //获取AESkey        File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),"key.sys");        SecretKey key = (SecretKey) new ObjectInputStream(new FileInputStream(file)).readObject();        //获取加密工具        Cipher cipher = Cipher.getInstance("AES");        //初始化加密工具        cipher.init(Cipher.DECRYPT_MODE,key);        //还原文本框的base64文本为密文        byte[] bytes = Base64.decode(editText.getText().toString(),Base64.DEFAULT);        //把密文解密为明文        byte[] bytes1  =cipher.doFinal(bytes);        //把明文设置到文本框中        editText.setText(new String(bytes1));    }}
xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical">    <EditText        android:id="@+id/asx_action_et"        android:layout_width="match_parent"        android:layout_height="100dp"/>    <Button        android:onClick="yaoshi"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="生成钥匙"/>    <Button        android:onClick="encode"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="ESK加密"/>    <Button        android:onClick="deCode"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="ESKj解密"/></LinearLayout>

AES 加密算法是可逆的,加密解密需要同一把秘钥。

首先需要把秘钥生成,使用秘钥生成器:

SecretKey sk = KeyGenerator.getInstance("AES").generateKey() ;

然后获取加密解密工具,获取后使用秘钥初始化加密工具:

//获取加密工具Cipher cipher = Cipher.getInstance("AES");//初始化加密工具cipher.init(Cipher.ENCRYPT_MODE,key);
然后使用加密工具对想要加密的内容进行加密:

//放入我们要加密的内容 并加密byte[] bytes = cipher.doFinal(editText.getText().toString().getBytes());

解密也是一样,加密解密使用同一把秘钥,即使用加密时的sk ,然后过程与加密一样

然后获取加密解密工具,获取后使用秘钥初始化加密工具:

//获取加密工具Cipher cipher = Cipher.getInstance("AES");//初始化加密工具cipher.init(Cipher.ENCRYPT_MODE,key);
然后使用加密工具对想要加密的内容进行加密:

//放入我们要加密的内容 并加密byte[] bytes = cipher.doFinal(editText.getText().toString().getBytes());



0 0