首页 > des vue 双倍长 解密_3DES双倍长加密 - osc_ojx9hm4t的个人空间 - OSCHINA - 中文开源技术交流社区...

des vue 双倍长 解密_3DES双倍长加密 - osc_ojx9hm4t的个人空间 - OSCHINA - 中文开源技术交流社区...

importjava.security.SecureRandom;importjavax.crypto.Cipher;importjavax.crypto.SecretKey;importjavax.crypto.SecretKeyFactory;importjavax.crypto.spec.DESKeySpec;

//结果与DES算法工具一致public classDES{public static voidmain(String[] args) {

String key= "F2C04AD9F598EE61C424C9C7D39BA75F";

String data= "06321643FF8B67EB";

String des=encryptECB3Des(key,data);

System.out.println(des);

}public staticString encryptECB3Des(String key, String src) {

System.out.println("encryptECB3Des->" + "key:" +key);

System.out.println("encryptECB3Des->" + "src:" +src);int len =key.length();if (key == null || src == null) {return null;

}if (src.length() % 16 != 0) {return null;

}if (len == 32) {

String outData= "";

String str= "";for (int i = 0; i < src.length() / 16; i++) {

str= src.substring(i * 16, (i + 1) * 16);

outData+=encECB3Des(key, str);

}returnoutData;

}return null;

}public staticString encECB3Des(String key, String src) {byte[] temp = null;byte[] temp1 = null;

temp1= encryptDes(hexStringToBytes(key.substring(0, 16)), hexStringToBytes(src));

temp= decryptDes(hexStringToBytes(key.substring(16, 32)), temp1);

temp1= encryptDes(hexStringToBytes(key.substring(0, 16)), temp);returnbytesToHexString(temp1);

}public staticString decECB3Des(String key, String src) {byte[] temp2 = decryptDes(hexStringToBytes(key.substring(0, 16)), hexStringToBytes(src));byte[] temp1 = encryptDes(hexStringToBytes(key.substring(16, 32)), temp2);byte[] dest = decryptDes(hexStringToBytes(key.substring(0, 16)), temp1);returnbytesToHexString(dest);

}public static String bytesToHexString(byte[] src) {

StringBuilder stringBuilder= new StringBuilder("");if (src == null || src.length <= 0) {return null;

}for (int i = 0; i < src.length; i++) {int v = src[i] & 0xFF;

String hv=Integer.toHexString(v);if (hv.length() < 2) {

stringBuilder.append(0);

}

stringBuilder.append(hv);

}returnstringBuilder.toString();

}public static byte[] hexStringToBytes(String hexString) {if (hexString == null || hexString.equals("")) {return null;

}

hexString=hexString.toUpperCase();int length = hexString.length() / 2;char[] hexChars =hexString.toCharArray();byte[] d = new byte[length];for (int i = 0; i < length; i++) {int pos = i * 2;

d[i]= (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));

}returnd;

}private static byte charToByte(charc) {return (byte) "0123456789ABCDEF".indexOf(c);

}/*** 3DES(双倍长) 解密

*

*@paramkeybyte

*@paramsrc

*@return

*/

public staticString decryptECB3Des(String key, String src) {if (key == null || src == null) {return null;

}if (src.length() % 16 != 0) {return null;

}if (key.length() == 32) {

String outData= "";

String str= "";for (int i = 0; i < src.length() / 16; i++) {

str= src.substring(i * 16, (i + 1) * 16);

outData+=decECB3Des(key, str);

}returnoutData;

}return null;

}/*** DES加密

**/

public static byte[] encryptDes(byte[] key, byte[] src) {try{//创建一个DESKeySpec对象

DESKeySpec desKey = newDESKeySpec(key);//创建一个密匙工厂

SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");//将DESKeySpec对象转换成SecretKey对象

SecretKey secretKey =keyFactory.generateSecret(desKey);//Cipher对象实际完成解密操作

Cipher cipher = Cipher.getInstance("DES/ECB/NoPadding");//用密匙初始化Cipher对象

cipher.init(Cipher.ENCRYPT_MODE, secretKey);//现在,获取数据并加密//正式执行加密操作

returncipher.doFinal(src);

}catch(Exception e) {

e.printStackTrace();

}return null;

}/*** des解密

*

*@paramkey

*@paramsrc

*@return

*/

public static byte[] decryptDes(byte[] key, byte[] src) {try{//DES算法要求有一个可信任的随机数源

SecureRandom random = newSecureRandom();//创建一个DESKeySpec对象

DESKeySpec desKey = newDESKeySpec(key);//创建一个密匙工厂

SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");//将DESKeySpec对象转换成SecretKey对象

SecretKey secretKey =keyFactory.generateSecret(desKey);//Cipher对象实际完成解密操作

Cipher cipher = Cipher.getInstance("DES/ECB/NoPadding");//用密匙初始化Cipher对象

cipher.init(Cipher.DECRYPT_MODE, secretKey, random);//现在,获取数据并加密//正式执行加密操作

returncipher.doFinal(src);

}catch(Exception e) {

e.printStackTrace();

}return null;

}

}

更多相关:

  • 题目:替换空格 请实现一个函数,把字符串 s 中的每个空格替换成"%20"。 输入:s = "We are happy." 输出:"We%20are%20happy." 限制: 0 <= s 的长度 <= 10000 解题: 时间复杂度:O(n) 空间复杂度:O(n) class Solution { public:s...

  • 在C++11标准库中,string.h已经添加了to_string方法,方便从其他类型(如整形)快速转换成字面值。 例如: for (size_t i = 0; i < texArrSize; i++)RTX_Shader.SetInt(string("TexArr[") + to_string(i) + "]", 7 + i);...

  • Ubuntu 14.04安装并升级之后,变成楷体字体非常难看,我昨天搞了一晚上,终于理了个头绪,这里整理一下。 经过网上调研,大家的一致看法是,使用开源字体库文泉驿的微黑字体效果比较理想,甚至效果不输windows平台的雅黑字体。下面我打算微黑来美化Ubuntu 14.04. 1.安装文泉驿微黑字体库 sudo aptitude...

  • 使用string时发现了一些坑。 我们知道stl 容器并不是线程安全的,所以在使用它们的过程中往往需要一些同步机制来保证并发场景下的同步更新。 应该踩的坑还是一个不拉的踩了进去,所以还是记录一下吧。 string作为一个容器,随着我们的append 或者 针对string的+ 操作都会让string内部的数据域动态增加,而动态增加的...

  • 在使用空时,习惯这么赋值  int *p = NULL;  编译器进行解释程序时,NULL会被直接解释成0,所以这里的参数根本就不是大家所想的NULL,参数已经被编译器偷偷换成了0,0是整数。  因此这面的问题就尴尬了 不好意思图片引用于网络中。 为啥呢不是this is the ptr function…这个。这就是C++中的...

  • var d= {a: 1,b: null,c: 3,d: undefined };Object.keys(d).forEach(k=>d[k]==null&&delete d[k]);//去掉值为null或undefined的对象属性//Object.keys(d).forEach(k=>(d[k]==null||d[k]==='')...

  • //ES6获取浏览器url跟参 public getUrlParam = a => (a = location.search.substr(1).match(new RegExp(`(^|&)${a}=([^&]*)(&|$)`)),a?a[2]:null);...

  • 文章目录1. 解决问题2. 应用场景3. 实现如下C++实现C语言实现4. 缺点 1. 解决问题 在简单工厂模式中,我们使用卖衣服进行举例,同一种工厂可以卖很多不同种类的衣服,工厂只是将衣服的生产过程进行了封装。 当我们增加衣服种类的时候,在简单工厂模式中需要修改工厂的代码,破坏了类的开闭原则(对扩展开发, 对修改关闭),...

  • 在服务端数据库的处理当中,涉及中文字符的结构体字段,需要转为Utf8后再存储到表项中。从数据库中取出包含中文字符的字段后,如果需要保存到char *类型的结构体成员中,需要转为Ansi后再保存。从数据库中取出类型数字的字段后,如果需要保存到int型的结构体成员中,需要调用atoi函数进行处理后再保存。 1 static char *...

  • 1. 我们先来看一下继承关系HttpServletRequest 接口继承ServletRequest接口 public abstract interface  ServletRequest{ public abstract ServletInputStream getInputStream()  throws IOExcepti...

  • 功能界面 源码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; u...

  • cocos2dx 制作单机麻将(二) 打乱麻将顺序2 前面解说了怎样打乱初始给定的麻将牌堆, 另一种是打乱随意给定的麻将牌堆 //混乱扑克2 void RandAppointCardData(BYTE cbCardData[],BYTE cbMaxCount,BYTE OriginalData[]/*源牌堆数据*/) {    ...

  • 原地址:http://www.cnblogs.com/88999660/archive/2013/03/15/2961587.html 保护资源管理文件的相关内容 Unity允许用户使用AssetBundle.CreateFromMemory从一个 byte[]数组中建立一个AssetBundle的对象。在运行传输解密时,可以用这种加...

  • IT发展至今,字符编码版本众多,目前流行的GBK,Unicode,UTF-8编码与汉字的转换可用如下代码:private void button1_Click(object sender, EventArgs e)        {            //汉字转为Unicode编码:            string hz = ...