高手、板主幫忙,一個加密的問題!!!
我們現在要從類似QQ的軟體上,透過一個連線連到網站上,需要把使用者的使用者名稱口令帶過來,這就需要對口令進行加密,然後在網站上對口令進行解密。準備使用jdk1.4自帶des,在類似QQ的軟體上加密密碼,透過連線傳遞密文和金鑰,然後到網站上用des和金鑰解密,現在出現一個問題就是,我接收到的密文和金鑰是字串,透過金鑰字串怎麼生成金鑰,另外將密文字串轉化成位元組時不穩定,解密有時會出現錯誤。
我用的測試程式碼如下:
import javax.crypto.*;
public class testdes {
public static void main(String[] args) {
testdes my = new testdes();
my.run();
}
public void run() {
//新增新安全演算法,如果用JCE就要把它新增進去
//Security.addProvider(new com.sun.crypto.provider.SunJCE());
String Algorithm = "DES"; //定義 加密演算法,可用 DES,DESede,Blowfish
String myinfo = "要加密的資訊";
try {
//生成金鑰
KeyGenerator keygen = KeyGenerator.getInstance(Algorithm);
SecretKey deskey = keygen.generateKey();
//加密
System.out.println("加密前的二進串:" + byte2hex(myinfo.getBytes()));
System.out.println("加密前的資訊:" + myinfo);
Cipher c1 = Cipher.getInstance(Algorithm);
c1.init(Cipher.ENCRYPT_MODE, deskey);
byte[] cipherByte = c1.doFinal(myinfo.getBytes());
System.out.println("加密後的字串:"+ (new String(cipherByte))+ "&你好");
System.out.println("加密後的二進串:" + byte2hex(cipherByte));
//解密
c1 = Cipher.getInstance(Algorithm);
c1.init(Cipher.DECRYPT_MODE, deskey);
System.out.println("金鑰="+deskey);
byte[] clearByte = c1.doFinal((new String(cipherByte)).getBytes());
System.out.println("解密後的二進串:" + byte2hex(clearByte));
System.out.println("解密後的資訊:" + (new String(clearByte)));
}
catch (java.security.NoSuchAlgorithmException e1) {
e1.printStackTrace();
}
catch (javax.crypto.NoSuchPaddingException e2) {
e2.printStackTrace();
}
catch (java.lang.Exception e3) {
e3.printStackTrace();
}
}
public 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();
}
}
類似QQ的軟體用的是VC,網站用的是Java
更為不確定的因素是jdk中對des的實現時預設,我不知道具體的確省值是多少,那麼就很難確定VC所調類庫的具體實現,如果對des的實現不同不知道會不會有影響,我對des具體的實現不清楚,另外我也不想搞清楚,只想使用。
大家說說看,不然就我透過JNI呼叫VC所呼叫的類庫這樣應該就不會有這樣的問題了吧!
我用的測試程式碼如下:
import javax.crypto.*;
public class testdes {
public static void main(String[] args) {
testdes my = new testdes();
my.run();
}
public void run() {
//新增新安全演算法,如果用JCE就要把它新增進去
//Security.addProvider(new com.sun.crypto.provider.SunJCE());
String Algorithm = "DES"; //定義 加密演算法,可用 DES,DESede,Blowfish
String myinfo = "要加密的資訊";
try {
//生成金鑰
KeyGenerator keygen = KeyGenerator.getInstance(Algorithm);
SecretKey deskey = keygen.generateKey();
//加密
System.out.println("加密前的二進串:" + byte2hex(myinfo.getBytes()));
System.out.println("加密前的資訊:" + myinfo);
Cipher c1 = Cipher.getInstance(Algorithm);
c1.init(Cipher.ENCRYPT_MODE, deskey);
byte[] cipherByte = c1.doFinal(myinfo.getBytes());
System.out.println("加密後的字串:"+ (new String(cipherByte))+ "&你好");
System.out.println("加密後的二進串:" + byte2hex(cipherByte));
//解密
c1 = Cipher.getInstance(Algorithm);
c1.init(Cipher.DECRYPT_MODE, deskey);
System.out.println("金鑰="+deskey);
byte[] clearByte = c1.doFinal((new String(cipherByte)).getBytes());
System.out.println("解密後的二進串:" + byte2hex(clearByte));
System.out.println("解密後的資訊:" + (new String(clearByte)));
}
catch (java.security.NoSuchAlgorithmException e1) {
e1.printStackTrace();
}
catch (javax.crypto.NoSuchPaddingException e2) {
e2.printStackTrace();
}
catch (java.lang.Exception e3) {
e3.printStackTrace();
}
}
public 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();
}
}
類似QQ的軟體用的是VC,網站用的是Java
更為不確定的因素是jdk中對des的實現時預設,我不知道具體的確省值是多少,那麼就很難確定VC所調類庫的具體實現,如果對des的實現不同不知道會不會有影響,我對des具體的實現不清楚,另外我也不想搞清楚,只想使用。
大家說說看,不然就我透過JNI呼叫VC所呼叫的類庫這樣應該就不會有這樣的問題了吧!
相關文章
- 一個寫xml的問題,高手幫忙啊!XML
- 一個郵件的JAVABEAN問題,請高手幫忙JavaBean
- NIO Socket的2個問題?請高手幫忙!
- 請高手幫忙分析一個JSP小程式的問題JS
- synchronized關鍵字問題?各位高手,幫幫忙!synchronized
- 請高手幫忙了,關於javamail的問題JavaAI
- 高手幫忙
- 高手幫忙!
- SPRING整合STRUCTS的小白問題 高手們幫幫忙啊SpringStruct
- 實時更新顯示問題清高手幫忙!!
- 請高手幫忙,關於多個連線的hibernate配置問題
- 請高手幫忙!
- 急,高手幫忙!
- RMI物件繫結到JNDI的問題,請高手幫忙!物件
- 關於反射的問題,請高手幫忙!線上急等!反射
- 關於digest認證的問題,請高手幫忙
- 紅旗5.0的安裝問題。請高手幫忙(轉)
- jms的問題,請高手幫忙解決一下,先謝了
- java學習中遇到的問題 請高手幫忙 線上等Java
- 請各路高手幫忙,關於JAVA NIO的方面的問題Java
- 急!!請高手幫忙
- jbuilder高手請幫忙UI
- 請各位高手幫忙!
- 需要高手幫忙~~
- 一個執行緒的問題。請大俠進來幫幫忙看看執行緒
- 麻煩各位高手幫忙
- 急!!!高手來幫忙呀!!
- 急!!!高手快來幫忙!!!
- 各位大哥,幫忙解決一下這個問題
- 您好, 第一章的一個問題, 清幫忙解決.
- 高手請幫忙看看小弟寫的這個web service:Web
- 業務平臺的開發(高手們幫幫忙!)
- 高手幫忙解決兩道JAVA題,跪謝!!Java
- 請熟悉混沌原理和c高手幫個忙 (轉)
- 各位高手幫幫忙吧!servlet多執行緒問題,詳細內容請進!!!Servlet執行緒
- 請高手幫幫忙,給點兒資訊也行
- 各位高手請幫忙,不勝感激!!!!
- 請幫忙解決第一章作者忽略的兩個問題!