- 浏览: 552434 次
- 性别:
- 来自: 石家庄
文章分类
最新评论
-
toyota2006:
thank you!
适配器(Adapter)模式 -
910014107:
收藏一下
JIRA安装和破解 -
wangchaobashen:
注册完是一年期的License,请问这个期限该如何修改呢?
JIRA安装和破解 -
ihqn19:
总而言之,就是不知道你想表达什么就对了。
JS 面向对象的简单应用实例 -
jxls162408:
第四步更新tomcat libraris ,找不到那个包呀。怎 ...
JIRA安装和破解
import java.security.Key; import java.security.Security; import javax.crypto.Cipher; public class DESCrypt { private static String strDefaultKey = "goodluck"; private Cipher encryptCipher = null; private Cipher decryptCipher = null; /** * 暗号化 明文入力String 密文出力 * @param strMing * 明文 * @return 密文 * @throws Exception */ public String getEncString(String strMing) throws Exception { return byteArr2HexStr(encrypt(strMing.getBytes("UTF8"))); } /** * 解密 String密文入力,String明文出力 * * * @param strMi * 密文 * @return 明文 * @throws Exception */ public String getDesString(String strMi) throws Exception { return new String(decrypt(hexStr2ByteArr(strMi)),"UTF8"); } public String getDesStr(String strMi) { String ming=null; try { ming= new String(decrypt(hexStr2ByteArr(strMi)),"UTF8"); } catch (Exception e) { ming = strMi; } return ming; } /** * 将byte数组转换为表示16进制值的字符串, 如:byte[]{8,18}转换为:0813, 和public static byte[] * hexStr2ByteArr(String strIn) 互为可逆的转换过程 * * @param arrB * 需要转换的byte数组 * @return 转换后的字符串 * @throws Exception * 本方法不处理任何异常,所有异常全部抛出 */ private 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 * 本方法不处理任何异常,所有异常全部抛出 */ private 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 DESCrypt() throws Exception { this(strDefaultKey); } /** * 指定密钥构造方法 * * @param strKey * 指定的密钥 * @throws Exception */ public DESCrypt(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 */ private byte[] encrypt(byte[] arrB) throws Exception { return encryptCipher.doFinal(arrB); } /** * 加密字符串 * * @param strIn * 需加密的字符串 * @return 加密后的字符串 * @throws Exception */ private String encrypt(String strIn) throws Exception { return byteArr2HexStr(encrypt(strIn.getBytes())); } /** * 解密字节数组 * * @param arrB * 需解密的字节数组 * @return 解密后的字节数组 * @throws Exception */ private byte[] decrypt(byte[] arrB) throws Exception { return decryptCipher.doFinal(arrB); } /** * 解密字符串 * * @param strIn * 需解密的字符串 * @return 解密后的字符串 * @throws Exception */ private 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) throws Exception { DESCrypt des = new DESCrypt(); String str1 = "长子"; // DES加密 String str2 = des.getEncString(str1); String deStr = des.getDesString(str2); System.out.println("密文:" + str2); // DES解密 System.out.println("明文:" + deStr); } }
法2
import java.security.Key; import java.security.SecureRandom; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; /** * * 使用DES加密与解密,可对byte[],String类型进行加密与解密 密文可使用String,byte[]存储. * * 方法: void getKey(String strKey)从strKey的字条生成一个Key * * String getEncString(String strMing)对strMing进行加密,返回String密文 String * getDesString(String strMi)对strMin进行解密,返回String明文 * * byte[] getEncCode(byte[] byteS)byte[]型的加密 byte[] getDesCode(byte[] * byteD)byte[]型的解密 */ public class DESCrypt { Key key; private static String strDefaultKey = "goodluck"; public DESCrypt(){ getKey(strDefaultKey); } /** * 根据参数生成KEY * * @param strKey */ public void getKey(String strKey) { try { KeyGenerator _generator = KeyGenerator.getInstance("DES"); _generator.init(new SecureRandom(strKey.getBytes())); this.key = _generator.generateKey(); _generator = null; } catch (Exception e) { e.printStackTrace(); } } /** * 加密String明文输入,String密文输出 * * @param strMing * @return */ public String getEncString(String strMing) { byte[] byteMi = null; byte[] byteMing = null; String strMi = ""; BASE64Encoder base64en = new BASE64Encoder(); try { byteMing = strMing.getBytes("UTF8"); byteMi = this.getEncCode(byteMing); strMi = base64en.encode(byteMi); } catch (Exception e) { e.printStackTrace(); } finally { base64en = null; byteMing = null; byteMi = null; } return strMi; } /** * 解密 以String密文输入,String明文输出 * * @param strMi * @return */ public String getDesString(String strMi) { BASE64Decoder base64De = new BASE64Decoder(); byte[] byteMing = null; byte[] byteMi = null; String strMing = ""; try { byteMi = base64De.decodeBuffer(strMi); byteMing = this.getDesCode(byteMi); strMing = new String(byteMing, "UTF8"); } catch (Exception e) { e.printStackTrace(); } finally { base64De = null; byteMing = null; byteMi = null; } return strMing; } public String getDesStr(String strMi) { BASE64Decoder base64De = new BASE64Decoder(); byte[] byteMing = null; byte[] byteMi = null; String strMing = ""; try { byteMi = base64De.decodeBuffer(strMi); byteMing = this.getDesCode(byteMi); strMing = new String(byteMing, "UTF8"); } catch (Exception e) { //e.printStackTrace(); strMing = strMi; } finally { base64De = null; byteMing = null; byteMi = null; } return strMing; } /** * 加密以byte[]明文输入,byte[]密文输出 * * @param byteS * @return */ private byte[] getEncCode(byte[] byteS) { byte[] byteFina = null; Cipher cipher; try { cipher = Cipher.getInstance("DES"); cipher.init(Cipher.ENCRYPT_MODE, key); byteFina = cipher.doFinal(byteS); } catch (Exception e) { e.printStackTrace(); } finally { cipher = null; } return byteFina; } /** * 解密以byte[]密文输入,以byte[]明文输出 * * @param byteD * @return */ private byte[] getDesCode(byte[] byteD) { Cipher cipher; byte[] byteFina = null; try { cipher = Cipher.getInstance("DES"); cipher.init(Cipher.DECRYPT_MODE, key); byteFina = cipher.doFinal(byteD); } catch (Exception e) { e.printStackTrace(); } finally { cipher = null; } return byteFina; } public static void main(String[] args) { System.out.println("des demo"); DESCrypt des = new DESCrypt();// 实例化一个对像 //des.getKey("MYKEY11");// 生成密匙 //System.out.println("key=MYKEY11"); String strEnc = des.getEncString("测试一下试试!");// 加密字符串,返回String的密文 System.out.println("密文=" + strEnc); String strDes = des.getDesString(strEnc);// 把String 类型的密文解密 System.out.println("明文=" + strDes); } }
发表评论
-
Java正则表达式教程
2010-03-15 11:06 940http://www.java3z.com/cwbwebhom ... -
Java文件下载
2010-02-21 10:15 1273Java文件下载的几种方式 public HttpServle ... -
使用正则表达式过滤非数字字符串
2009-12-17 14:31 5523/** * * @param ... -
HashMap遍历的两种方式
2009-12-11 17:40 1513HashMap遍历的两种方式 第一种: Map map ... -
Java 获得文件编码格式
2009-12-03 18:06 4555其中用到到3个jar包见附件 import info.mon ... -
消除 list重复值及交集,并集,差集
2009-09-23 17:10 4651消除 list重复值 public void removeD ... -
request得到相对路径与绝对路径,以及request.getRealPath("/")的替换方法
2009-09-18 10:31 5386看到很多人都喜欢用 request.getContextPat ... -
Apache Commons工具集简介
2009-09-07 11:19 12971、Commons BeanUtils http://jaka ... -
返回月份最大天数
2009-08-14 16:52 1239<% String year = session.ge ... -
jad(一个好用java反编译工具) & 可视化反编译(jd-gui)
2008-11-11 11:38 4974jad(一个好用java反编译工具) 1,反编译制定clas ... -
深入理解abstract class和interface
2006-12-20 09:59 1612引自:http://www.blogjava.ne ... -
StringUtils常用方法
2006-12-07 11:10 2695处理文本对Java应用来说应该算是家常便饭了,在1.4出现之前 ... -
Java基础--用泛型设计DAO
2006-10-19 14:17 2797举个很简单的例子: public interface Base ... -
Java基础--equals(Object) 与 == 的区别
2006-10-10 09:25 2733在比较对象时候,常常用到 "==" 和 & ... -
Java 接口大全、面向接口编程、什么时候使用接口。选择Java接口还是抽象类
2006-09-28 16:13 19831什么叫面向接口编程[ ... -
议:接口(interface)给我们带来什么,什么是面向接口编程?
2006-09-28 13:45 4652议: 1,接口带给我们是更多是灵活性还是提供一种标准? 2, ... -
Java基础--遍历Collection和数组的简洁的方法
2006-09-27 14:13 5302利用JDK1.5的语法,可以省略hasNext和next的烦琐 ...
相关推荐
java des加密解密jar包,实现了utf-8防止乱码,这个是jar包,可以直接使用,需要源码可以找我
描述中提到,这个程序是基于与Java版本的互操作性需求而修改的,确保了与Java实现的DES/CBC/PKCS5Padding解密过程兼容,并且能够正确处理UTF-8编码的中文字符,这意味着它能与在线加密网站的结果保持一致。...
一个简单的8字符des加解密程序 在命令行环境下实现对8字符的des加解密
4. **数据转换**:如果加密解密的原始数据是字符串,需要确保两边使用的字符编码一致,例如都使用UTF-8。 通过遵循上述步骤和注意事项,可以实现在Java和.NET之间互操作的DES加密解密。在实际项目中,考虑到安全性...
- 在JavaScript中,注意密钥和初始化向量(IV)必须是8字节的,通常用UTF-8编码的字符串。 2. **Java端的DES加解密**: - Java的`javax.crypto`包提供了DES加解密功能。以下是一个简单的示例: ```java import ...
但是,必须注意的是,由于JavaScript的实现细节,有时在处理字符串时可能会出现字符编码问题,因此在实际操作中,应确保数据在加密前后保持一致的编码格式,例如统一使用UTF-8。 总结来说,DES加密解密在Java和...
- 在跨平台通信时,必须确保两端使用的编码方式(如ASCII、UTF-8等)一致,否则可能会导致加密解密失败。 这套工具类对于需要在JAVA和iOS应用之间传输敏感数据的开发者来说非常有用,可以确保数据在传输过程中的...
byte[] keyBytes = "我的密钥".getBytes("UTF-8"); DESKeySpec desKeySpec = new DESKeySpec(keyBytes); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); SecretKey desKey = keyFactory....
String decryptedText = new String(decryptedBytes, "UTF-8"); ``` 在给定的描述中,作者提到有相关研究或探讨的可以加入群组或联系其MSN或邮箱,这表明他们可能分享了使用Java实现DES加密解密的源代码。在提供的...
在Java中实现DES加解密,主要涉及到`javax.crypto`包中的类和方法。本文将深入讲解DES加密和解密的基本原理,以及如何在Java环境中进行操作。 DES算法基于Feistel网络结构,使用64位的密钥对数据进行加密。由于DES...
System.out.println("解密后的明文: " + new String(decrypted, "UTF-8")); } } ``` 在这个例子中,我们创建了一个`DESKeySpec`对象,然后通过`SecretKeyFactory`生成`SecretKey`。接着,我们初始化`Cipher`对象...
- 字节顺序:Java和.NET在处理字节序列时可能存在差异,需要确保编码和解码的一致性,例如,本例中使用了UTF-8编码。 - 兼容性:虽然示例中没有提及,但要考虑不同Java和.NET版本间的兼容性问题,确保使用的加密库...
System.out.println("Decrypted Text: " + new String(decryptedData, "UTF-8")); } catch (Exception e) { e.printStackTrace(); } } } ``` ##### 3. 代码解析 1. **密钥生成**:使用`KeyGenerator`类生成一...
// 将解密后的字节数组转换为UTF-8字符串输出 System.out.println(new String(bysDecrypted, "UTF-8")); ``` #### 四、关键技术点总结 1. **DES加密算法**:DES是一种对称加密算法,即加密和解密使用相同的密钥。...
byte[] keyBytes = "密钥字符串".getBytes("UTF-8"); DESedeKeySpec keySpec = new DESedeKeySpec(keyBytes); ``` 3. 初始化Cipher对象:使用`Cipher`类的`getInstance()`方法,指定加密/解密模式(如CBC、ECB等)和...
4. **编码格式**:确保Java和JavaScript在进行字符串到字节数组的转换时使用相同的字符编码,如UTF-8。 5. **数据格式**:加密后的结果是字节数据,需要以某种方式(如Base64编码)在Java和JavaScript之间传输。 ...
3. Java默认仅支持128位的密钥长度,如果需要使用超过128位的密钥(如3DES的168位),需要下载并安装不受限制的JCE政策文件。 4. JavaScript的加密库可能与Java实现的加密库存在差异,例如在处理填充方式上,需确保...
在Java中,可以使用`new String(bytes, "UTF-8")`或`String.getBytes("UTF-8")`;在C#中,使用`Encoding.UTF8.GetString()`或`Encoding.UTF8.GetBytes()`。 4. **互操作性**: - 当Java和C#之间进行加密数据交换时...
- `return new String(res, "UTF-8")`:将解密后的字节数组转换为UTF-8编码的字符串并返回。 ##### 5. 加密与解密的核心逻辑 ```java private static byte[] encrypt(byte[] data, byte[] key) throws Exception {...
byte[] keyBytes = "我的秘钥".getBytes("UTF-8"); // 使用UTF-8编码的秘钥字符串 DESKeySpec desKeySpec = new DESKeySpec(keyBytes); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); Secret...