- 浏览: 442048 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (168)
- Hibernate (17)
- MySQL (7)
- struts2 (14)
- Spring (12)
- Javascript (20)
- CSS (8)
- ajax/jquery (11)
- HttpClient (6)
- HTTP (1)
- java小知识 (23)
- Servlet/JSP (5)
- Oracle (0)
- Quartz (3)
- Lucene/Nutch (12)
- c# winform (2)
- J2ME (1)
- POI (5)
- php5 (2)
- DWR(Ajax) (1)
- log4j (1)
- dom4j (3)
- 獲取郵件聯系人 (2)
- 随意 (5)
- Heritrix (1)
- ireport+jasper (1)
- 算法 (2)
- java虚拟机 (1)
- maven (2)
最新评论
-
janrick:
太感谢了,我正需要加密的函数呢
java中DES加密解密例子 -
xuganggogo:
suyang119 写道请教一下,补充的三级的可以用吗?当然可 ...
关于条件查询detachedCriteria的注意的地方 -
suyang119:
请教一下,补充的三级的可以用吗?
关于条件查询detachedCriteria的注意的地方 -
xuganggogo:
大江帅 写道var name="attriName& ...
有关在JavaScript中使用EL表达式的问题 -
大江帅:
var name="attriName"; ...
有关在JavaScript中使用EL表达式的问题
最近在学习一些关于加密解密的东西,在网上看到很多关于DES的介绍,感觉很抽象。后来找到一个实例,看了些代码后,能明白个基本。要学习的相关类:javax.crypto
.Cipher
, java.security.Security
例子代码如下:
import java.security.*;
import javax.crypto.*;
public class DESPlus {
private static String strDefaultKey = "national";
private Cipher encryptCipher = null;
private Cipher decryptCipher = null;
/**
* 将byte数组转换为表示16进制值的字符串, 如:byte[]{8,18}转换为:0813, 和public static byte[]
* hexStr2ByteArr(String strIn) 互为可逆的转换过程
*
* @param arrB
* 需要转换的byte数组
* @return 转换后的字符串
* @throws Exception
* 本方法不处理任何异常,所有异常全部抛出
*/
public static String byteArr2HexStr(byte[] arrB) {
int iLen = arrB.length;
// 每个byte用两个字符才能表示,所以字符串的长度是数组长度的两倍
StringBuffer sb = new StringBuffer(iLen * 2);
for (int i = 0; i < iLen; i++) {
int intTmp = arrB[i];
// 把负数转换为正数
while (intTmp < 0) {
intTmp = intTmp + 256;
}
// 小于0F的数需要在前面补0
if (intTmp < 16) {
sb.append("0");
}
sb.append(Integer.toString(intTmp, 16));
}
return sb.toString();
}
/**
* 将表示16进制值的字符串转换为byte数组, 和public static String byteArr2HexStr(byte[] arrB)
* 互为可逆的转换过程
*
* @param strIn
* 需要转换的字符串
* @return 转换后的byte数组
*/
public static byte[] hexStr2ByteArr(String strIn) {
byte[] arrB = strIn.getBytes();
int iLen = arrB.length;
// 两个字符表示一个字节,所以字节数组长度是字符串长度除以2
byte[] arrOut = new byte[iLen / 2];
for (int i = 0; i < iLen; i = i + 2) {
String strTmp = new String(arrB, i, 2);
arrOut[i / 2] = (byte) Integer.parseInt(strTmp, 16);
}
return arrOut;
}
/**
* 默认构造方法,使用默认密钥
*
* @throws Exception
*/
public DESPlus() throws Exception {
this(strDefaultKey);
}
/**
* 指定密钥构造方法
*
* @param strKey
* 指定的密钥
* @throws Exception
*/
public DESPlus(String strKey) {
Security.addProvider(new com.sun.crypto.provider.SunJCE());
Key key;
try {
key = getKey(strKey.getBytes());
encryptCipher = Cipher.getInstance("DES");
encryptCipher.init(Cipher.ENCRYPT_MODE, key);
decryptCipher = Cipher.getInstance("DES");
decryptCipher.init(Cipher.DECRYPT_MODE, key);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 加密字节数组
*/
public byte[] encrypt(byte[] arrB){
byte[] s = null ;
try {
s = encryptCipher.doFinal(arrB);
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
return s ;
}
/**
* 将启动码strIn加密,返回加密后的启动码
*/
public String encrypt(String strIn) {
return byteArr2HexStr(encrypt(strIn.getBytes()));
}
/**
* 解密字节数组
*/
public byte[] decrypt(byte[] arrB) {
byte[] s = null ;
try {
s = decryptCipher.doFinal(arrB);
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
return s ;
}
/**
* 解密 strIn
*/
public String decrypt(String strIn){
return new String(decrypt(hexStr2ByteArr(strIn)));
}
/**
* 从指定字符串生成密钥,密钥所需的字节数组长度为8位 不足8位时后面补0,超出8位只取前8位
*
* @param arrBTmp
* 构成该字符串的字节数组
* @return 生成的密钥
* @throws java.lang.Exception
*/
private Key getKey(byte[] arrBTmp) {
// 创建一个空的8位字节数组(默认值为0)
byte[] arrB = new byte[8];
// 将原始字节数组转换为8位
for (int i = 0; i < arrBTmp.length && i < arrB.length; i++) {
arrB[i] = arrBTmp[i];
}
// 生成密钥
Key key = new javax.crypto.spec.SecretKeySpec(arrB, "DES");
return key;
}
}
测试类如下:Test1.java
public class Test1 {
public static void main(String[] args) {
try {
String test = "启动码";
DESPlus des = new DESPlus("2384722348"); //自定义密钥
System.out.println("加密前的字符:"+test);
System.out.println("加密后的字符:"+des.encrypt(test));
System.out.println("解密后的字符:"+des.decrypt(des.encrypt(test)));
} catch (Exception e) {
e.printStackTrace();
}
}
}
希望能给大家一点帮助。
在学习的时候,对于“ byte数组转换成十六进制值的字符串
”这个不是很熟,所以还要加强字符串的操作。
发表评论
-
正则替换标点符号的方法。解决方式还不错
2011-01-28 11:08 3256地址:http://topic.csdn.net/u/2008 ... -
hadoop环境搭建问题记录
2010-10-12 17:11 12251,错误 org.apache.hadoop.hdfs.se ... -
Java 正则表达式
2010-07-16 11:52 12971. 正则表达式规则 1.1 普通字符 字母、数字 ... -
字符串转换为Date
2010-04-24 11:04 1711查看了下SimpleDateFomart这个类。 用字符串转 ... -
正则表达式替换掉字符串中的重复字符
2009-12-11 17:51 2308str = str.replaceAll("( ... -
JFreeChart 部分API说明
2009-08-15 11:55 930http://amozon.iteye.com/blog/ ... -
反编译工具
2009-08-14 14:46 1175jad及常用命令 一、基本用法 Usage:jad ... -
JFreeChart
2009-08-10 18:35 11531,柱状图 package xu.chart.demo; ... -
java生成缩略图
2009-07-17 11:02 2311转自:http://wing929.iteye.com/blo ... -
jstl 时间处理
2009-06-24 14:06 1564jstl 中的日期格式化! [转贴 2005-10-25 1 ... -
Java Properties类
2009-05-31 14:26 2064全文转自:http://twtmnm1314.iteye.co ... -
java 的pass by value(传值)
2009-05-13 15:21 1140这里写一下java的值传递 参数是基本类型的时候: cla ... -
快速修改本機局域網IP信息
2009-05-09 13:07 2017在開發過程中,遇到需要頻繁的切換IP的問題。每次手動修改IP需 ... -
double:保留几位小数点
2009-03-06 10:03 2253java.text.DecimalFormat myforma ... -
增加环境内存--java
2009-02-13 14:50 996在eclipse中,在虚拟机环境变量VM arguments中 ... -
javaIO流读繁体中文网页的乱码问题
2009-02-01 17:09 1602IDE:eclipse IDE的编码是UTF-8(开发需要) ... -
学习java.lang.ProcessBuilder类
2009-02-01 17:08 5478近来的工作中,了 ... -
Servlets/JSP开发技术问答
2009-02-01 17:06 922学习J2EE,需要学习很多 ... -
jdk1.5新特性 ConcurrentHashMap
2009-02-01 17:06 7133曾经研究过jkd1.5新特性,其中ConcurrentHash ... -
JAVA实现在图片上写文字
2009-02-01 17:05 4834功能:直接在一张已有的图片上写字,可指定文字颜色。 ...
相关推荐
java版Des加密解密源码 DES加密解密程序的主程序在 FileDES类中 运行时使用的例子是本目录下的111.doc文件,运行后自动生成222.doc文件和333.doc文件。 其中111.doc文件加密后的文件是222.doc文件,222.doc文件...
java des加密解密里面有详细的应用例子
java使用des加密解密示例,适合java语言的所有平台,与.net等平台的加密解密兼容
主要介绍了java中使用DES加密解密实例,需要的朋友可以参考一下
DES加密解密程序的主程序在 FileDES类中 运行时使用的例子是本目录下的111.doc文件,运行后自动生成222.doc文件和333.doc文件。 其中111.doc文件加密后的文件是222.doc文件,222.doc文件解密后文件是333.doc文件。...
DES的java代码,有界面,好用,是个很好的学习的例子
工程根目录下mds5/src/com/目录下有两个例子: 其中DES.java是DES算法的对称加密解密 其中RSA.java是RSA算法的非对称加密解密 项目只给出了加密解密方法,并没有给出保存密钥的方法
Java,android,ios通过DES加密和解密获得相同的结果。 DES算法:CBC操作:(android)PKCS5Padding(ios)kCCOptionPKCS7Padding 入门 添加依赖 dependencies : flutter_des : ^2.0.0 # latest version 例子 ...
DES加密解密程序的主程序在 FileDES类中 运行时使用的例子是本目录下的111.doc文件,运行后自动生成222.doc文件和333.doc文件 。 其中111.doc文件加密后的文件是222.doc文件,222.doc文件解密后文件是333.doc文件...
本实例解释如何利用DES私钥加密算法加解密,对称加密的例子,本例中定义的加密算法可以是DES,DESede,Blowfish等,选择DES算法,密钥长度必须为56位,用密钥加密明文(message),生成密文(cipherText),操作模式为加密...
Java加密组件实现DES、RSA和SHA加密算法,很好的例子。
主要介绍了详解DES加密算法及在Java程序中的使用示例,文中还有一个用Java实现的DES三重加密的例子,需要的朋友可以参考下
java对称/非对称加解密的例子 几个自己写的,网上收集并测试过的java使用对称算法,非对称算法进行加解密的例子
加密工具 ... 三重DES(CBC)密钥:C0DC0B1B8C40C3EA57EABB27D9356C30值:566F7B068C237023F64AC46ED6B6323E结果(加密):F5145DD5070188BC226EEEF88DC84339结果(解密):071356ED6706862A4929582
WDSsoft的一款免费源代码 JCT 1.0,它是一个Java加密解密常用工具包。 Java局域网通信——飞鸽传书源代码 28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书 Java局域网通信——飞鸽传书源代码,大家都知道VB...
WDSsoft的一款免费源代码 JCT 1.0,它是一个Java加密解密常用工具包。 Java局域网通信——飞鸽传书源代码 28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书 Java局域网通信——飞鸽传书源代码,大家都知道...
WDSsoft的一款免费源代码 JCT 1.0,它是一个Java加密解密常用工具包。 Java局域网通信——飞鸽传书源代码 28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书 Java局域网通信——飞鸽传书源代码,大家都知道...
WDSsoft的一款免费源代码 JCT 1.0,它是一个Java加密解密常用工具包。 Java局域网通信——飞鸽传书源代码 28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书 Java局域网通信——飞鸽传书源代码,大家都知道...
Java加密解密工具集 JCT v1.0源码包.rar Java半透明图片实现的步骤及源代码.rar Java右键弹出菜单源码 Java吃豆子游戏源代码.rar Java图片加水印,支持旋转和透明度设置 Java圆形按钮实例代码,含注释 Java圆形电子...
WDSsoft的一款免费源代码 JCT 1.0,它是一个Java加密解密常用工具包。 Java局域网通信——飞鸽传书源代码 28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书 Java局域网通信——飞鸽传书源代码,大家都知道VB...