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
- Android中的AES加密算法解析
- java 中的 aes 加密算法
- IOS中的AES加密算法
- Android加密算法:AES、Base64加密算法
- android AES加密算法示例
- android ---AES加密算法
- Android中的SHA加密算法解析
- Android AES加密算法及其实现
- Android AES加密算法及其实现
- Android AES加密算法及其实现
- Android AES加密算法及其实现
- Android AES加密算法工具类
- Android AES加密算法及其实现
- Android AES加密算法及其实现
- Android AES加密算法及其实现
- 【加密/解密】Botan 中的 AES 加密算法实例
- 【加密/解密】Botan 中的 AES 加密算法实例
- AES加密算法
- Ubuntu下 phpcs 和 composer 全局安装
- C++文件读取语言
- C++精讲系列1
- 多核编程 与 单核多线程编程的区别
- 数据分析的书籍
- Android中的AES加密算法解析
- 关于wamp下http://localhost地址The requested URL / was not found on this server.问题解决过程分享
- 微信时代的预约-乐享其约的会议室预约
- Vue初体验(四),关于事件v-on
- [PAT-乙级]1002.写出这个数
- 单件模式
- Python Code :不同Json文件的数据挖掘、清洗、反写
- 软件开发常用英语词汇
- FFT算法1-倒位排序法的实现