高手、板主幫忙,一個加密的問題!!!
我們現在要從類似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所呼叫的類庫這樣應該就不會有這樣的問題了吧!
相關文章
- golang陣列問題,想了一個上午沒發現問題出在哪,求大神幫忙解答一下Golang陣列
- 安裝時提示錯誤,請高手幫忙解決一下
- 請問新建話題是不是有問題?版主幫忙看看
- 老哥們我遇到一個很奇怪的問題 子程式間互相影響。。求幫忙解決
- 【前端幫幫忙】第6期 移動端使用video標籤需要注意的一些問題前端IDE
- 求助大佬幫忙找一個想不起名字的功能
- [提問交流]求大神幫忙看一下,本人新手還在學習,遇到一個問題,想請教一下!!
- 求各位前輩幫忙看看連表查詢字首問題
- 請問yansongda/pay V3 支付輪子有用過的嗎?幫個忙!!
- 面對一個Bug,高手程式設計師是如何解決問題的?程式設計師
- 大神幫忙看一看,講一下思路
- 大神幫我看個C函式的問題函式
- 妹子幫個忙!嫁給程式設計師好嗎?程式設計師
- 各位大神,幫忙看個問題,mac wda 環境搭建,開啟 http://192.168.20.30:8100/inspector,未顯示出手機介面MacHTTP
- 女性想健康,AI來幫忙AI
- 寫一個 vuepress 主題Vue
- 分享一個DcatAdmin主題
- 請問一個 authorize的問題
- 請豆包幫忙總結翻譯一個網站,翻譯效果還不錯網站
- 關於 Locust 建立 Task 的疑問,困擾了好久,路過的幫忙看下。
- onethinkphp新建模組後,無法使用普通使用者登入問題,麻煩幫忙看下。PHP
- 【hexo】一個好看的個人部落格主題Hexo
- 主機板定製中X86主機板和ARM主機板的比較
- 求求有沒有沒睡的大佬幫忙改改
- 主機板上來了一個新鄰居,CPU慌了!
- Swoole Compiler 加密 Drupal 產生的一些問題Compile加密
- 一個有趣的this指向問題
- 一個有趣的鎖問題
- MySQL:一個特殊的問題MySql
- 最近思考的一個問題
- 科技愛好者週刊(第 254 期):人生是一個長板問題
- b550主機板和b450主機板哪個好?電腦b550主機板和b450主機板區別介紹
- 特性標記清理:GitHub Actions 來幫忙!Github
- 故障模型哪家強?PDR 模型來幫忙模型
- 大夥幫忙給點人生建議哈!
- 致阿里雲:我有一個小需求,請幫忙去掉AI助手(阿里雲的第一次修復)阿里AI
- 思考一個問題
- 一個小問題
- 華碩主機板和技嘉主機板哪個好?看完你就不糾結了