各位大大,小弟最近在完成一个DES对文件加密的程序,其中在密钥的保存环节碰到了如下问题:
我通过下面的代码生成Key类型的密钥

KeyGenerator _generator = KeyGenerator.getInstance("DES");
_generator.init(new SecureRandom(strKey.getBytes()));
this.key = _generator.generateKey();之后用Key的getEncoded()方法将密钥转换成byte[]后存入一个字符串用来存在数据库中,如下:byte[] encodekey = key1.getEncoded();
String strkey = new String(encodekey);随后在将字符串转换为byte[],在恢复成密钥,就出现了问题,恢复的密钥与之前的密钥不同。代码如下:byte[]   desEncode = strkey.getBytes(); 
SecretKeySpec destmp = new SecretKeySpec(desEncode, "DES"); 
Key   key2 = (Key) destmp;请问问题处在哪里?这个问题困惑了好几天了,麻烦各位帮我看看,不胜感激。

解决方案 »

  1.   

    byte[] encodekey = key1.getEncoded();
    String strkey = new String(encodekey);这个比较危险,因为组字符串的时候,会面临编码问题,而由于映射关系导致你的byte并不能总是顺利转成char。建议先用BASE64对byte[]进行编码,然后将编码后的String存入数据库,这样避免转换char的时候出编码问题。
      

  2.   

      BASE64Encoder encoder=new BASE64Encoder();
            
            BASE64Decoder decoder=new BASE64Decoder();