一个关于加解密的问题:3DES算法,把加密后得到的byte数组转换成String再解密就会出错。 又没有考虑编码的问题?或者空串或者空格(trim)? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 大哥啊!快救我啊!直接对加密后的byte数组解密救没错,如果经过类型转换才会出错,所以类是没错的,关键是转换的哦问题啊! 有可能转换出错我在用RSA做类似的功能时碰到过,我是转换成16进制字符串传递的,如果密文字节数组的第一个元素<15,那么十六进制表示是0f,0被自动丢掉了 建议转换成16进制或者用BASE64编码后传输 如上所说用base64等javax.mail.internet.MimeUtility有encode和decode method实现 sun.misc.BASE64Encodersun.misc.BASE64Decoder 哈哈。你看看下面的代码能不能对你有用阿。import java.security.*;import javax.crypto.*;public class DesedeEx { public static void main(String args[])throws Exception { //加密过程。 KeyGenerator genkey=KeyGenerator.getInstance("Desede"); genkey.init(168); Key mykey=genkey.generateKey( ); System.out.println("Generating the key done...."); System.out.println(mykey); Cipher cipher=Cipher.getInstance("Desede/ECB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE,mykey); byte []plaintext=text.getBytes("UTF8"); //注意把字符串转换成字节需要指定编码方式,一般用此“UTF8”。 byte[] ciphertext=cipher.doFinal(plaintext);//密文。 //解密过程。很简单阿。 cipher.init(Cipher.DECRYPT_MODE,mykey); byte[] decryptedText=cipher.doFinal(ciphertext); String output=new String(decryptedText,"UTF8"); //此处指定编码方式了哈哈。肯定行的。 System.out.println("\n\nDecrypted text:"+output); }} 问题解决了吗??我也碰到了一样的问题。加密后得到的byte[]转换成字符串后,写到一个html的超链上,但是下一个服务程序得到后解密时总是出错,错误如上。up说的方法在加密后没有转换成字符串。 import sun.misc.*;BASE64Encoder enc=new BASE64Encoder();String cipherString=enc.encode(ciphertext);BASE64Decoder dec=new BASE64Decoder();ciphertext=dec.decode(cipherString); 呵呵,楼主的问题,我帮你试过了,只要把密文用BASE64编码然后传输,接受后再用BASE64解码,然后再解密就可以了,没问题的。 本人是大三学生,初学java事件处理问题,帮我看一下代码!!!!!!!!! 为什么有些类的变量命名为 ‘_XJXJ’ 这样的形式呢? 文件上传 初学者 求助线程问题? 求购Java入门的电子图书下载 j2se与ORACLE连接问题 弱智问题:我们怎么才知道要使用的方法需要实现什么接口才能使用这个方法呢? 如何利用JAVA的输入流接从键盘上的float数据 报错:Multiple annotations found at this line: - a cannot be resolved 如何搭建java开发环境? 菜m提问!我想做一个下凹的框框,然后里边放置一些按钮? JAVA中可以做吗?
我在用RSA做类似的功能时碰到过,我是转换成16进制字符串传递的,如果密文字节数组的第一个元素<15,那么十六进制表示是0f,0被自动丢掉了
javax.mail.internet.MimeUtility有encode和decode method实现
sun.misc.BASE64Decoder
import java.security.*;
import javax.crypto.*;public class DesedeEx
{ public static void main(String args[])throws Exception
{ //加密过程。
KeyGenerator genkey=KeyGenerator.getInstance("Desede");
genkey.init(168);
Key mykey=genkey.generateKey( );
System.out.println("Generating the key done....");
System.out.println(mykey); Cipher cipher=Cipher.getInstance("Desede/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE,mykey);
byte []plaintext=text.getBytes("UTF8");
//注意把字符串转换成字节需要指定编码方式,一般用此“UTF8”。
byte[] ciphertext=cipher.doFinal(plaintext);//密文。
//解密过程。很简单阿。
cipher.init(Cipher.DECRYPT_MODE,mykey);
byte[] decryptedText=cipher.doFinal(ciphertext);
String output=new String(decryptedText,"UTF8");
//此处指定编码方式了哈哈。肯定行的。
System.out.println("\n\nDecrypted text:"+output);
}
}
我也碰到了一样的问题。
加密后得到的byte[]转换成字符串后,写到一个html的超链上,但是下一个服务程序得到后解密时总是出错,错误如上。up说的方法在加密后没有转换成字符串。
String cipherString=enc.encode(ciphertext);BASE64Decoder dec=new BASE64Decoder();
ciphertext=dec.decode(cipherString);