原文:http://blog.csdn.net/chinarenzhou/archive/2008/07/11/2638306.aspx
[code="java"]
import java.security.*;
import javax.crypto.*;
public class Des {
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) throws Exception {
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数组
* @throws Exception
* 本方法不处理任何异常,所有异常全部抛出
* @author
*/
public static byte[] hexStr2ByteArr(String strIn) throws Exception {
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 Des() throws Exception {
this(strDefaultKey);
}
/**
* 指定密钥构造方法
*
* @param strKey
* 指定的密钥
* @throws Exception
*/
public Des(String strKey) throws Exception {
Security.addProvider(new com.sun.crypto.provider.SunJCE());
Key key = getKey(strKey.getBytes());
encryptCipher = Cipher.getInstance("DES");
encryptCipher.init(Cipher.ENCRYPT_MODE, key);
decryptCipher = Cipher.getInstance("DES");
decryptCipher.init(Cipher.DECRYPT_MODE, key);
}
/**
* 加密字节数组
*
* @param arrB
* 需加密的字节数组
* @return 加密后的字节数组
* @throws Exception
*/
public byte[] encrypt(byte[] arrB) throws Exception {
return encryptCipher.doFinal(arrB);
}
/**
* 加密字符串
*
* @param strIn
* 需加密的字符串
* @return 加密后的字符串
* @throws Exception
*/
public String encrypt(String strIn) throws Exception {
return byteArr2HexStr(encrypt(strIn.getBytes()));
}
/**
* 解密字节数组
*
* @param arrB
* 需解密的字节数组
* @return 解密后的字节数组
* @throws Exception
*/
public byte[] decrypt(byte[] arrB) throws Exception {
return decryptCipher.doFinal(arrB);
}
/**
* 解密字符串
*
* @param strIn
* 需解密的字符串
* @return 解密后的字符串
* @throws Exception
*/
public String decrypt(String strIn) throws Exception {
return new String(decrypt(hexStr2ByteArr(strIn)));
}
/**
* 从指定字符串生成密钥,密钥所需的字节数组长度为8位 不足8位时后面补0,超出8位只取前8位
*
* @param arrBTmp
* 构成该字符串的字节数组
* @return 生成的密钥
* @throws java.lang.Exception
*/
private Key getKey(byte[] arrBTmp) throws Exception {
// 创建一个空的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;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
String test = "Hellow Word!";
//Des des = new Des();//默认密钥
Des des = new Des("leemenz");//自定义密钥
System.out.println("加密前的字符:"+test);
System.out.println("加密后的字符:"+des.encrypt(test));
System.out.println("解密后的字符:"+des.decrypt(des.encrypt(test)));
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}[/code]
分享到:
相关推荐
主要介绍了使用java自带des加密算法实现文件加密和字符串加密的示例,需要的朋友可以参考下
DES(Data Encryption ...DES算法的入口参数有三个:Key、Data、Mode。其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。
JAVA_DES3加密算法,完整的JAVA DES3 包括获取key,字符串类型和byte型的算法加密和解密
实现了Des字符串,加密解密,java版本的,java源代码
java编写的一个关于des的加密算法 ...请输入您要加密的字符串:des加密算法 请输入您自己想要的密钥:des 加密前的字符:des加密算法 您输入的密钥:des 加密后的字符:decba59b42607d5e0da53909a2a359d4
本程序是本人综合一些加密解密算法,写成的加密解密算法类 其中包括对字符串加密解密、文件加密解密 加密方法有:DES,RC2,Rijndael,TripleDES,C#与java默认的DES加密算 法接口,MD5加密算法 vs2008 C# 源码
上次忘记发源代码了,补上。 java与delphi通用DES加解密(源代码)
文件包括三个程序: 1 Skey_DES.java 生成对称密钥 2 SEnc.java 基于DES的对称加密算法 ...要加密的字符串在SEnc.java中定义,按顺序编译执行三个文件即可。 已经过本人和同事测试,用时可根据具体情况修改部分内容。
常用MD5加密算法和3-DES加密算法java实现,在实际项目中我们会经常用到加密字符串,用md5算法是很多人的选择,其中包含源码,可直接使用。
利用des算法对字符串进行加密解密运算,简单的window下控制台程序。
des加密解密算法,通过DES加密解密实现一个String字符串的加密和解密.
DES加密算法基本功能Java实现源程序 确保“aa.txt”文件存在且在同一个目录中,否则将会报找不到加密文件的错误!
利用C语言编写的DES加密算法,能够对任意长度的字符数组进行加解密。通过编写相应的JNI接口文件能够很容易移植到Android平台,从而解决不同平台DES加解密结果不一致的问题。
delphi和java都是从网上下的源码,将delphi的修改了一下。目前没发现什么问题,加密、解密可以通用。
利用Java进行3DES的加密算法,包含字符串密钥,偏移量加密字符串,数组密钥,偏移量加密数组,数组密钥加密数组,字符串密钥加密字符串。如果对你有帮助,麻烦给个好评吧!
能够对一串字符进行Des加密(加密内容可以为文件,也可以是输入的一长串字符)
北京联通全网有关网上订购和点播接口URL加密算法 * *采用3DES加密, ECB模式/使用PKCS7方式填充不足位, *目前给的密钥是192位(24个字节)经过BASE64编码后的可见字符串
JSP 基于DES算法管理系统是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,mysql数据库存储,系统主要采用B/S模式开发。 二、功能介绍 程序文本相似比较系统要满足以下...
本程序支持字符串和文件加密和解密,密文以16进制形式输出。能够显示输入密钥的16轮子密钥,对于输入的8字节明文能够显示出16轮迭代的中间结果。鉴于本人有限,有不对的地方希望大家多多批评和指正! 本人上传的处女...
这个加密软件可以实现几种主流的加密算法:Blowfish、DES、TripleDES(即3DES)、AES、RC4的加密和解密,并有图形界面