博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android Studio 解决AES加解密异常
阅读量:6350 次
发布时间:2019-06-22

本文共 3582 字,大约阅读时间需要 11 分钟。

1. NoSuchMethodError

ANDROID : java.lang.NoSuchMethodError: 在 org.apache.commons.codec.binary.Base64

解决方法:

org.apache.commons.codec.binary.Base64类不是标准的一部分 Android Api。若要解决这一问题,可以将共同性编解码器添加到您的应用程序,或只是使用标准 Base64 类附带 Android 通过替换这些行:

import org.apache.commons.codec.binary.Base64; … String retVal = Base64.encodeBase64String(digest); 通过: import android.util.Base64; … String retVal = Base64.encodeToString(digest, Base64.DEFAULT);

2. BadPaddingException

android 上AES解密是报错javax.crypto.BadPaddingException: pad block corrupted

解决方法:

初始化安全种子时采用如下方法:

SecureRandom sr = SecureRandom.getInstance("SHA1PRNG", "Crypto");sr.setSeed(seed); kgen.init(128, sr); // 192 and 256 bits may not be available

3. Android下AES加解密工具类

import android.util.Base64;import java.io.UnsupportedEncodingException;import java.security.Key;import java.security.NoSuchAlgorithmException;import java.security.NoSuchProviderException;import java.security.SecureRandom;import javax.crypto.Cipher;import javax.crypto.KeyGenerator;import javax.crypto.SecretKey;import javax.crypto.spec.SecretKeySpec;/** * AES加密工具类 * 使用: * { *      String source = "mazaiting"; *      String key = "123456"; * 

* String encryptString = AesUtil.encrypt(source, key); * System.out.println("加密后: " + encryptString); *

* String decryptString = AesUtil.decrypt(encryptString, key); * System.out.println("解密后: " + decryptString); * } * * @author mazaiting * @date 2018/3/30 */public class AesUtil { /** * 算法Key */ private static final String KEY_ALGORITHM = "AES"; /** * 加密算法 */ private static final String CIPHER_ALGORITHM = "AES"; /** * 加密数据 * * @param data 待加密内容 * @param key 加密的密钥 * @return 加密后的数据 */ public static String encrypt(String data, String key) { try { // 获得密钥 Key desKey = keyGenerator(key); // 实例化一个密码对象 Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM); // 密码初始化 cipher.init(Cipher.ENCRYPT_MODE, desKey); // 执行加密 byte[] bytes = cipher.doFinal(data.getBytes("UTF-8")); return Base64.encodeToString(bytes, Base64.DEFAULT); } catch (Exception e) { // 解析异常 return ""; } } /** * 解密数据 * * @param data 待解密的内容 * @param key 解密的密钥 * @return 解密后的字符串 */ public static String decrypt(String data, String key) { try { // 生成密钥 Key kGen = keyGenerator(key); // 实例化密码对象 Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM); // 初始化密码对象 cipher.init(Cipher.DECRYPT_MODE, kGen); // 执行解密 byte[] bytes = cipher.doFinal(Base64.decode(data, Base64.DEFAULT)); return new String(bytes); } catch (Exception e) { e.printStackTrace(); // 解析异常 return ""; } } /** * 获取密钥 * * @param key 密钥字符串 * @return 返回一个密钥 * @throws NoSuchAlgorithmException * @throws UnsupportedEncodingException */ private static Key keyGenerator(String key) throws NoSuchAlgorithmException, UnsupportedEncodingException, NoSuchProviderException { KeyGenerator kGen = KeyGenerator.getInstance(KEY_ALGORITHM); SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG", "Crypto"); secureRandom.setSeed(key.getBytes()); kGen.init(128, secureRandom); SecretKey secretKey = kGen.generateKey(); byte[] encoded = secretKey.getEncoded(); return new SecretKeySpec(encoded, KEY_ALGORITHM); }}

转载地址:http://yftla.baihongyu.com/

你可能感兴趣的文章
vs2008工程配置
查看>>
1082: 敲7(多实例测试)
查看>>
ADMemberShip 尝试
查看>>
数据库实例创建好后,用plsql登录居然提示ora-12526监听程序:所有适用例程都处于受限模式的问题...
查看>>
【BZOJ4025】二分图
查看>>
leetcode-same tree
查看>>
通过AOP自定义注解实现日志管理
查看>>
UEFI+GPT双硬盘安装Win10+Ubuntu16.04双系统
查看>>
<c:if>条件判断 和 取值做乘法运算
查看>>
vdbench-自动化测试脚本
查看>>
javascript中arguments,callee,caller
查看>>
js下判断 iframe 是否加载完成的完美方法
查看>>
开发技巧-Java通过HttpProxy实现穿越
查看>>
protect golang source code
查看>>
设计模式之—代理模式
查看>>
Git Tutorial 7 - File States
查看>>
ti-link双路由器间的无线链接
查看>>
Excel生成报表之解决方案---簇状圆锥图
查看>>
算法导论-动态规划-装配线调度
查看>>
IBM Intel 微软
查看>>