首页 > 学院 > 开发设计 > 正文

des加解密

2019-11-07 22:48:07
字体:
来源:转载
供稿:网友

里面的String "qwert11111" 可以替换成自定义的,没有必要保持一样

package com.utils;import android.util.Base64;import java.security.Key;import java.security.SecureRandom;import javax.crypto.Cipher;import javax.crypto.SecretKeyFactory;import javax.crypto.spec.DESKeySpec;import javax.crypto.spec.IvParameterSpec;public class DES {PRivate final static String HEX = "0123456789ABCDEF";private final static String TRANSFORMATION = "DES/CBC/PKCS5Padding";//DES是加密方式 CBC是工作模式 PKCS5Padding是填充模式private final static String IVPARAMETERSPEC = "01020304";////初始化向量参数,AES 为16bytes. DES 为8bytes.private final static String ALGORITHM = "DES";//DES是加密方式private static final String SHA1PRNG = "SHA1PRNG";//// SHA1PRNG 强随机种子算法, 要区别4.2以上版本的调用方法/** 生成随机数,可以当做动态的密钥 加密和解密的密钥必须一致,不然将不能解密*/public static String generateKey() {try {SecureRandom localSecureRandom = SecureRandom.getInstance(SHA1PRNG);byte[] bytes_key = new byte[20];localSecureRandom.nextBytes(bytes_key);String str_key = toHex(bytes_key);return str_key;} catch (Exception e) {e.printStackTrace();}return null;}//二进制转字符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();}private static void appendHex(StringBuffer sb, byte b) {sb.append(HEX.charAt((b >> 4) & 0x0f)).append(HEX.charAt(b & 0x0f));}// 对密钥进行处理private static Key getRawKey(String key) throws Exception {DESKeySpec dks = new DESKeySpec(key.getBytes());SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);return keyFactory.generateSecret(dks);}/*** DES算法,加密** @param data 待加密字符串* @return 加密后的字节数组,一般结合Base64编码使用*/public static String encode(String data) {return encode("qwert11111", data.getBytes());}/*** DES算法,加密** @param data 待加密字符串* @param key 加密私钥,长度不能够小于8位* @return 加密后的字节数组,一般结合Base64编码使用*/public static String encode(String key, byte[] data) {try {Cipher cipher = Cipher.getInstance(TRANSFORMATION);IvParameterSpec iv = new IvParameterSpec(IVPARAMETERSPEC.getBytes());cipher.init(Cipher.ENCRYPT_MODE, getRawKey(key), iv);byte[] bytes = cipher.doFinal(data);return Base64.encodeToString(bytes, Base64.DEFAULT);} catch (Exception e) {return null;}}/*** 获取编码后的值** @param data* @return*/public static String decode( String data) {return decode("qwert11111", Base64.decode(data, Base64.DEFAULT));}/*** DES算法,解密** @param data 待解密字符串* @param key 解密私钥,长度不能够小于8位* @return 解密后的字节数组*/public static String decode(String key, byte[] data) {try {Cipher cipher = Cipher.getInstance(TRANSFORMATION);IvParameterSpec iv = new IvParameterSpec(IVPARAMETERSPEC.getBytes());cipher.init(Cipher.DECRYPT_MODE, getRawKey(key), iv);byte[] original = cipher.doFinal(data);String originalString = new String(original);return originalString;} catch (Exception e) {return null;}}}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表