IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> AES加密解密(ECB模式),Android面试真题精选 -> 正文阅读

[移动开发]AES加密解密(ECB模式),Android面试真题精选

private Button decode;

private TextView tvDecode;

private Activity mActivity;

private Context mContext;

private String key = "huangxiaoguo1

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享

234";//必须16位

private byte[] encrypt;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_aes);

mActivity = this;

mContext = this;

encryptionContext = (EditText) findViewById(R.id.et_encryption_context);

encryption = (Button) findViewById(R.id.btn_encryption);

tvEncryption = (TextView) findViewById(R.id.tv_encryption);

decode = (Button) findViewById(R.id.btn_decode);

tvDecode = (TextView) findViewById(R.id.tv_decode);

initListener();

}

private void initListener() {

encryption.setOnClickListener(this);

decode.setOnClickListener(this);

}

@Override

public void onClick(View view) {

switch (view.getId()) {

case R.id.btn_encryption://加密

String encryptionString = encryptionContext.getText().toString().trim();

if (TextUtils.isEmpty(encryptionString)) {

Toast.makeText(mContext, “请输入加密内容”, Toast.LENGTH_SHORT).show();

return;

}

encrypt = AESUtils.encrypt(encryptionString.getBytes(), key.getBytes());

tvEncryption.setText(new String(encrypt));

break;

case R.id.btn_decode://解密

String decodeString = tvEncryption.getText().toString().trim();

if (TextUtils.isEmpty(decodeString)) {

Toast.makeText(mContext, “请先加密”, Toast.LENGTH_SHORT).show();

return;

}

byte[] decrypt = AESUtils.decrypt(encrypt, key.getBytes());

tvDecode.setText(new String(decrypt));

break;

}

}

}

AESUtils

package tsou.com.encryption.aesecb;

import javax.crypto.Cipher;

import javax.crypto.spec.SecretKeySpec;

/**

  • AES加密解密工具

  • @author huangxiaoguo

*/

public class AESUtils {

/**

  • AES加密

  • @param data

  •        将要加密的内容 
    
  • @param key

  •        密钥 
    
  • @return 已经加密的内容

*/

public static byte[] encrypt(byte[] data, byte[] key) {

//不足16字节,补齐内容为差值

int len = 16 - data.length % 16;

for (int i = 0; i < len; i++) {

byte[] bytes = { (byte) len };

data = ArrayUtils.concat(data, bytes);

}

try {

SecretKeySpec skeySpec = new SecretKeySpec(key, “AES”);

Cipher cipher = Cipher.getInstance(“AES/ECB/NoPadding”);

cipher.init(Cipher.ENCRYPT_MODE, skeySpec);

return cipher.doFinal(data);

} catch (Exception e) {

e.printStackTrace();

}

return new byte[] {};

}

/**

  • AES解密

  • @param data

  •        将要解密的内容 
    
  • @param key

  •        密钥 
    
  • @return 已经解密的内容

*/

public static byte[] decrypt(byte[] data, byte[] key) {

data = ArrayUtils.noPadding(data, -1);

try {

SecretKeySpec skeySpec = new SecretKeySpec(key, “AES”);

Cipher cipher = Cipher.getInstance(“AES/ECB/NoPadding”);

cipher.init(Cipher.DECRYPT_MODE, skeySpec);

byte[] decryptData = cipher.doFinal(data);

int len = 2 + ByteUtils.byteToInt(decryptData[4]) + 3;

return ArrayUtils.noPadding(decryptData, len);

} catch (Exception e) {

e.printStackTrace();

}

return new byte[] {};

}

}

ArrayUtils

package tsou.com.encryption.aesecb;

/**

  • 数组工具

  • @author huangxiaoguo

*/

public class ArrayUtils {

/**

  • 合并数组

  • @param firstArray

  •        第一个数组 
    
  • @param secondArray

  •        第二个数组 
    
  • @return 合并后的数组

*/

public static byte[] concat(byte[] firstArray, byte[] secondArray) {

if (firstArray == null || secondArray == null) {

return null;

}

byte[] bytes = new byte[firstArray.length + secondArray.length];

System.arraycopy(firstArray, 0, bytes, 0, firstArray.length);

System.arraycopy(secondArray, 0, bytes, firstArray.length,

secondArray.length);

return bytes;

}

/**

  • 去除数组中的补齐

  • @param paddingBytes

  •        源数组 
    
  • @param dataLength

  •        去除补齐后的数据长度 
    
  • @return 去除补齐后的数组

*/

public static byte[] noPadding(byte[] paddingBytes, int dataLength) {

if (paddingBytes == null) {

return null;

}

byte[] noPaddingBytes = null;

if (dataLength > 0) {

if (paddingBytes.length > dataLength) {

noPaddingBytes = new byte[dataLength];

System.arraycopy(paddingBytes, 0, noPaddingBytes, 0, dataLength);

} else {

noPaddingBytes = paddingBytes;

}

} else {

int index = paddingIndex(paddingBytes);

if (index > 0) {

noPaddingBytes = new byte[index];

System.arraycopy(paddingBytes, 0, noPaddingBytes, 0, index);

}

}

return noPaddingBytes;

}

/**

  • 获取补齐的位置

  • @param paddingBytes

  •        源数组 
    
  • @return 补齐的位置

*/

private static int paddingIndex(byte[] paddingBytes) {

for (int i = paddingBytes.length - 1; i >= 0; i–) {

if (paddingBytes[i] != 0) {

return i + 1;

}

}

return -1;

}

}

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-12-05 12:09:21  更:2021-12-05 12:11:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:40:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码