高手、板主帮忙,一个加密的问题!!!

03-08-20 zmeng
我们现在要从类似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所调用的类库这样应该就不会有这样的问题了吧!

猜你喜欢