android AES加密代码
2016-07-19 16:21
381 查看
package com.example.crack_me; import java.security.Key; import java.security.SecureRandom; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; /** * Created by Anciety on 7/19/16. */ public class Encrption { public static String encrypt(String key, String raw_text) throws Exception { byte[] rawKey = getRawKey(key.getBytes()); byte[] result = encrypt(rawKey, raw_text.getBytes()); return toHex(result); } public static String decrypt(String key, String encrypted) throws Exception { byte[] rawKey = getRawKey(key.getBytes()); byte[] enc = toByte(encrypted); byte[] result = decrypt(rawKey, enc); return new String(result); } private static byte[] getRawKey(byte[] seed) throws Exception { KeyGenerator keyGenerator = KeyGenerator.getInstance("AES"); **SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG", "Crypto");** secureRandom.setSeed(seed); keyGenerator.init(128, secureRandom); SecretKey secretKey = keyGenerator.generateKey(); byte[] raw = secretKey.getEncoded(); return raw; } private static byte[] encrypt(byte[] raw, byte[] raw_text) throws Exception { SecretKeySpec secretKeySpec = new SecretKeySpec(raw, "AES"); Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec); byte[] encrypted = cipher.doFinal(raw_text); return encrypted; } private static byte[] decrypt(byte[] raw, byte[] encrypted) throws Exception { SecretKeySpec secretKeySpec = new SecretKeySpec(raw, "AES"); Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.DECRYPT_MODE, secretKeySpec); byte[] raw_text = cipher.doFinal(encrypted); return raw_text; } public static String toHex(String text) { return toHex(text.getBytes()); } public static String toHex(byte[] buf) { if (buf == null) return ""; StringBuffer result = new StringBuffer(2*buf.length); for (int i = 0; i < buf.length; i++) { appendHex(result, buf[i]); } return result.toString(); } public static String fromHex(String hex) { return new String(toByte(hex)); } public static byte[] toByte(String hexString) { int len = hexString.length() / 2; byte[] result = new byte[len]; for (int i = 0; i < len; i++) result[i] = Integer.valueOf(hexString.substring(2 * i, 2 * i + 2), 16).byteValue(); return result; } private final static String HEX = "0123456789ABCDEF"; private static void appendHex(StringBuffer stringBuffer, byte b) { stringBuffer.append(HEX.charAt((b >> 4) & 0x0f)).append(HEX.charAt(b & 0x0f)); } }
SecureRandom secureRandom = SecureRandom.getInstance(“SHA1PRNG”, “Crypto”);
注意这一行,最后还有一个Crypto,如果只有SHA1PRNG可能出现
javax.crypto.BadPaddingException: pad block corrupted
相关文章推荐
- Android下的MultDex
- Android input上报*、#键值笔记
- Android6.0 framework层权限相关源码分析
- 如何使用Android Studio开发/调试Android源码
- ViewPager和Fragment的混合使用
- Freescale android 4.4.2 平台工具链安装--技巧
- Android View坐标getLeft, getRight, getTop, getBottom
- android 类似于支付宝咻咻咻界面的按钮波纹效果
- Android ListView 常用技巧
- Android开发之ClipDrawable
- 对 Android 开发者有益的 40 条优化建议
- Android应用QQ第三方登录出现100044提示
- android实现登录发送短信验证码或者语音验证码以及一个倒计时的内部类
- Android导出Kml
- 如何使用Android Studio把自己的Android library分享到jCenter和Maven Central
- Android定制出厂默认输入法(其他设置类似)
- 初识 Android Studio
- Android源码编译详解【三】:Ubuntu 服务器的搭载与配置
- android 沉浸式状态栏(像ios那样的状态栏与应用统一颜色样式)
- [Android]类似java.lang.IllegalStateException: Expected异常的解决方法