- 浏览: 448722 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (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 3297地址:http://topic.csdn.net/u/2008 ... -
hadoop环境搭建问题记录
2010-10-12 17:11 12651,错误 org.apache.hadoop.hdfs.se ... -
Java 正则表达式
2010-07-16 11:52 13451. 正则表达式规则 1.1 普通字符 字母、数字 ... -
字符串转换为Date
2010-04-24 11:04 1746查看了下SimpleDateFomart这个类。 用字符串转 ... -
正则表达式替换掉字符串中的重复字符
2009-12-11 17:51 2351str = str.replaceAll("( ... -
JFreeChart 部分API说明
2009-08-15 11:55 963http://amozon.iteye.com/blog/ ... -
反编译工具
2009-08-14 14:46 1215jad及常用命令 一、基本用法 Usage:jad ... -
JFreeChart
2009-08-10 18:35 11961,柱状图 package xu.chart.demo; ... -
java生成缩略图
2009-07-17 11:02 2356转自:http://wing929.iteye.com/blo ... -
jstl 时间处理
2009-06-24 14:06 1606jstl 中的日期格式化! [转贴 2005-10-25 1 ... -
Java Properties类
2009-05-31 14:26 2116全文转自:http://twtmnm1314.iteye.co ... -
java 的pass by value(传值)
2009-05-13 15:21 1175这里写一下java的值传递 参数是基本类型的时候: cla ... -
快速修改本機局域網IP信息
2009-05-09 13:07 2065在開發過程中,遇到需要頻繁的切換IP的問題。每次手動修改IP需 ... -
double:保留几位小数点
2009-03-06 10:03 2304java.text.DecimalFormat myforma ... -
增加环境内存--java
2009-02-13 14:50 1032在eclipse中,在虚拟机环境变量VM arguments中 ... -
javaIO流读繁体中文网页的乱码问题
2009-02-01 17:09 1633IDE:eclipse IDE的编码是UTF-8(开发需要) ... -
学习java.lang.ProcessBuilder类
2009-02-01 17:08 5516近来的工作中,了 ... -
Servlets/JSP开发技术问答
2009-02-01 17:06 956学习J2EE,需要学习很多 ... -
jdk1.5新特性 ConcurrentHashMap
2009-02-01 17:06 7193曾经研究过jkd1.5新特性,其中ConcurrentHash ... -
JAVA实现在图片上写文字
2009-02-01 17:05 4901功能:直接在一张已有的图片上写字,可指定文字颜色。 ...
相关推荐
java版Des加密解密源码 DES加密解密程序的主程序在 FileDES类中 运行时使用的例子是本目录下的111.doc文件,运行后自动生成222.doc文件和333.doc文件。 其中111.doc文件加密后的文件是222.doc文件,222.doc文件...
总的来说,通过Java实现3DES加密解密,我们需要理解加密算法的基本原理,熟悉Java的相关加密库,并掌握如何生成和使用密钥。在实际开发中,确保数据的安全性至关重要,因此正确地使用加密技术是每个IT专业人员必备的...
本文将详细介绍如何在Java环境中实现DES加密和解密。 DES,全称为数据加密标准,基于Feistel密码结构,采用64位的密钥,但其中只有56位是真正参与加密过程的。DES分为两个主要阶段:加密和解密,这两个过程使用相同...
以下是关于3DES加密解密算法在Java中的实现细节: 首先,为了使用3DES,Java程序需要引入特定的JAR包,这些包通常位于`JAVA_HOME/jre/lib/`目录下,包括`jce.jar`、`US_export_policy.jar`、`local_policy.jar`以及...
在这个例子中,我们创建了一个`DESKeySpec`对象,然后通过`SecretKeyFactory`生成`SecretKey`。接着,我们初始化`Cipher`对象进行加密或解密操作。`Cipher.ENCRYPT_MODE`表示加密,`Cipher.DECRYPT_MODE`表示解密。...
本Java实现的DES加密解密源码提供了一个可运行的例子,这对于理解和学习DES的工作原理非常有帮助。源码中的注释清晰,使得开发者能够快速了解每一步操作的含义。 DES加密过程主要包括以下几个步骤: 1. **Key ...
DES(Data Encryption Standard)是一种...然而,这个例子展示了如何在JavaScript和Java之间使用DES加密实现数据的安全传输。确保在生产环境中遵循最佳实践,比如使用更强大的加密算法和更长的密钥,以及定期更新密钥。
java使用des加密解密示例,适合java语言的所有平台,与.net等平台的加密解密兼容
为了实现JavaScript和Java之间的DES加密互通,前端发送加密后的数据到后端,后端解密后进行处理,然后再将加密的结果返回给前端。这个过程需要确保所有加密参数的一致性,包括密钥、模式、填充和编码方式。 通过...
在Java中实现3DES加密解密,需要使用`javax.crypto`包中的`Cipher`类。以下是一个简单的3DES加密解密Java示例: ```java import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto....
在Java中实现3DES加密和解密涉及到以下几个关键点: 1. **密钥生成**:在Java中,你可以使用`java.security.KeyGenerator`类来生成3DES密钥。首先需要实例化一个`KeyGenerator`对象,然后调用`init()`方法初始化它...
这个压缩包文件中的"加密解密字符串的例子"很可能是提供了一个关于如何在编程中实现字符串加密和解密的示例。接下来,我们将深入探讨加密解密的基础知识以及可能涉及的技术。 1. 加密解密原理: 加密是将明文(可...
在Java编程语言中,数据加密标准(DES,...总之,这个Java实例展示了如何在应用程序中使用DES加密解密技术。不过,为了确保数据的安全,开发者应考虑使用更现代、更安全的加密算法,并遵循最佳实践来处理和存储密钥。
DES加密解密程序的主程序在 FileDES类中 运行时使用的例子是本目录下的111.doc文件,运行后自动生成222.doc文件和333.doc文件。 其中111.doc文件加密后的文件是222.doc文件,222.doc文件解密后文件是333.doc文件。...
总的来说,Java字符串加密解密涉及到多个层面的知识,包括加密算法、密钥管理、安全协议等。理解和熟练掌握这些技术对于保障网络安全至关重要。在实际开发中,还需要关注加密算法的版本限制、密钥的安全存储以及法律...
总之,理解和实现Java与C#之间的DES加密解密代码是跨平台数据安全的关键步骤。确保一致性、正确处理边界条件和异常,以及选择适当的加密模式和密钥管理策略,都是实现这一目标的关键因素。同时,随着技术的发展,...
以下是一个Java DES加密解密的例子: ```java import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; public class DESUtil { private final static String ALGORITHM = "DES"; public static ...
标题"DES加密算法(JAVA和C语言描述)结果一致"表明我们将探讨如何在两种不同的编程语言——Java和C中实现DES加密,确保得到相同的加密结果。在跨语言实现加密算法时,一致性至关重要,因为这确保了无论在哪种环境下...
这个示例可能是一个简单的加密解密应用,基于提供的标签和文件名,我们可以推测它包含了一个名为`Demo.java`的源代码文件和一个可能是加密后生成的临时或结果文件`t.obj`。 `Demo.java`很可能包含了具体的加密和...
这个例子中,`Des算法JAVA的实现`文件可能包含了一个完整的Java程序,演示了上述步骤的代码实现。通过运行这个程序,你可以看到DES加密和解密的实际效果。然而,实际应用中,为了安全性,通常会使用更强大的加密算法...