关于DES加解密 要求上送数据时要用des做加密,接收到数据后要des解密,这是我第一次接触des,有好多不明白的地方,请高人指点一下,java类库中有没有现成的类可用,如果自己写要怎么实现?在网上看了好多C程序写的,好像很难懂,而且加解密只能是8个字节,可不可以不限字节长度的呢?? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://topic.csdn.net/t/20050307/12/3830259.html javax.crypto这个包里有你需要的东西 谢谢楼上两位兄弟,这些我看了,我就是用了javax.crypto包中的类,加密后的字节数组发送到服务端后,解析后不对 private static final String Algorithm = "DES"; // 定义 加密算法,可用 DES,DESede,Blowfish // keybyte为加密密钥,长度为24字节 // src为被加密的数据缓冲区(源) public static byte[] encryptMode(byte[] keybyte, byte[] src) { try { // 生成密钥 SecretKey deskey = new SecretKeySpec(keybyte, Algorithm); // 加密 Cipher c1 = Cipher.getInstance(Algorithm); c1.init(Cipher.ENCRYPT_MODE, deskey); return c1.doFinal(src); } catch (Exception e1) { e1.printStackTrace(); } return null; } // keybyte为加密密钥,长度为24字节 // src为加密后的缓冲区 public static byte[] decryptMode(byte[] keybyte, byte[] src) { try { // 生成密钥 SecretKey deskey = new SecretKeySpec(keybyte, Algorithm); // 解密 Cipher c1 = Cipher.getInstance(Algorithm); c1.init(Cipher.DECRYPT_MODE, deskey); return c1.doFinal(src); } catch (java.security.NoSuchAlgorithmException e1) { e1.printStackTrace(); } catch (javax.crypto.NoSuchPaddingException e2) { e2.printStackTrace(); } catch (java.lang.Exception e3) { e3.printStackTrace(); } return null; } // 转换成十六进制字符串 public static String byte2hex(byte[] b) { String hs = ""; String stmp = ""; for (int n = 0; n < b.length; n++) { stmp = (java.lang.Integer.toHexString(b[n] & 0XFF)); if (stmp.length() == 1) hs = hs + "0" + stmp; else hs = hs + stmp; if (n < b.length - 1) hs = hs + ":"; } return hs.toUpperCase(); } public static void main(String[] args) { // 添加新安全算法,如果用JCE就要把它添加进去 Security.addProvider(new com.sun.crypto.provider.SunJCE()); /*byte[] keyBytes = { 0x11, 0x22, 0x4F, 0x58, (byte) 0x88, 0x10, 0x40, 0x38, 0x28, 0x25, 0x79, 0x51, (byte) 0xCB, (byte) 0xDD, 0x55, 0x66, 0x77, 0x29, 0x74, (byte) 0x98, 0x30, 0x40, 0x36, (byte) 0xE2 };*/ byte []keyBytes = "12345678".getBytes(); // 24字节的密钥 String szSrc = "hechenhui19831224"; System.out.println("加密前的字符串:" + szSrc); byte[] encoded = encryptMode(keyBytes, szSrc.getBytes()); for(int i = 0; i < encoded.length; i ++){ System.out.print(encoded[i]); System.out.print(" "); if((i + 1) % 8 == 0){ System.out.println(""); } } System.out.println("加密后的字符串:" + new String(encoded)); byte[] srcBytes = decryptMode(keyBytes, encoded); System.out.println("解密后的字符串:" + (new String(srcBytes))); } 汗,我运行的结果是对的加密前的字符串:hechenhui1983122492 62 -108 -74 77 36 -66 25 -63 6 -1 -5 83 83 118 24 18 115 79 -107 24 -18 50 74 加密后的字符串:\>��M$����SSvsO��2J解密后的字符串:hechenhui19831224 关于Eclipse 我写的断言那里错了呢? 为什么出红线?? 集合类问题 想将JTable中的数据导到Excel中,怎么导? 一直未得到解决的笔试题目 初学者的一个关于【JAR】的问题,不吝赐教..... 请问有什么方法将JAVA程序打包成带JVM的EXE文件! 救命 听说过数据库连接池,但是听说还有变量池,什么叫变量池?怎么做? 这个问题都没有人回答?不会吧!!! swing小问题 在GUI中获取数据用表格显示,为什么显示多个表格,而不是一个表格
// keybyte为加密密钥,长度为24字节
// src为被加密的数据缓冲区(源)
public static byte[] encryptMode(byte[] keybyte, byte[] src) {
try {
// 生成密钥
SecretKey deskey = new SecretKeySpec(keybyte, Algorithm);
// 加密
Cipher c1 = Cipher.getInstance(Algorithm);
c1.init(Cipher.ENCRYPT_MODE, deskey);
return c1.doFinal(src);
} catch (Exception e1) {
e1.printStackTrace();
}
return null;
} // keybyte为加密密钥,长度为24字节
// src为加密后的缓冲区
public static byte[] decryptMode(byte[] keybyte, byte[] src) {
try {
// 生成密钥
SecretKey deskey = new SecretKeySpec(keybyte, Algorithm);
// 解密
Cipher c1 = Cipher.getInstance(Algorithm);
c1.init(Cipher.DECRYPT_MODE, deskey);
return c1.doFinal(src);
} catch (java.security.NoSuchAlgorithmException e1) {
e1.printStackTrace();
} catch (javax.crypto.NoSuchPaddingException e2) {
e2.printStackTrace();
} catch (java.lang.Exception e3) {
e3.printStackTrace();
}
return null;
} // 转换成十六进制字符串
public static String byte2hex(byte[] b) {
String hs = "";
String stmp = "";
for (int n = 0; n < b.length; n++) {
stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
if (stmp.length() == 1)
hs = hs + "0" + stmp;
else
hs = hs + stmp;
if (n < b.length - 1)
hs = hs + ":";
}
return hs.toUpperCase();
} public static void main(String[] args) {
// 添加新安全算法,如果用JCE就要把它添加进去
Security.addProvider(new com.sun.crypto.provider.SunJCE());
/*byte[] keyBytes = { 0x11, 0x22, 0x4F, 0x58, (byte) 0x88, 0x10, 0x40,
0x38, 0x28, 0x25, 0x79, 0x51, (byte) 0xCB, (byte) 0xDD, 0x55,
0x66, 0x77, 0x29, 0x74, (byte) 0x98, 0x30, 0x40, 0x36,
(byte) 0xE2 };*/
byte []keyBytes = "12345678".getBytes();
// 24字节的密钥
String szSrc = "hechenhui19831224";
System.out.println("加密前的字符串:" + szSrc);
byte[] encoded = encryptMode(keyBytes, szSrc.getBytes());
for(int i = 0; i < encoded.length; i ++){
System.out.print(encoded[i]);
System.out.print(" ");
if((i + 1) % 8 == 0){
System.out.println("");
}
}
System.out.println("加密后的字符串:" + new String(encoded));
byte[] srcBytes = decryptMode(keyBytes, encoded);
System.out.println("解密后的字符串:" + (new String(srcBytes)));
}
加密前的字符串:hechenhui19831224
92 62 -108 -74 77 36 -66 25
-63 6 -1 -5 83 83 118 24
18 115 79 -107 24 -18 50 74
加密后的字符串:\>��M$����SSvsO��2J
解密后的字符串:hechenhui19831224