日期:2014-05-20  浏览次数:20635 次

加密解密时的key值问题
这段代码是web开发时用   Cipher.getInstance( "DESEDE/ECB/PKCS5Padding ");加密解密的key值,当web启动后,数据经过这个key加密,存入数据库,取出来经过这个key值解密,当然没有问题,问题是,当web服务器重启,key值会发生变化,取出来的数据就不能通过解密还原,请问如何解决
SecureRandom   sr   =   new   SecureRandom(SecurityConstance.DEFAULT_PRIVATE_KEY.getBytes( "UTF-8 "));
KeyGenerator   kGen   =   KeyGenerator.getInstance( "DESEDE ");
kGen.init(168,   sr);
Key   key   =   kGen.generateKey();
defaultDesEncrypt   =   new   DESEncrypt(key);
defaultDesDecrypt   =   new   DESDecrypt(key);

------解决方案--------------------
给他个固定的种子

String s = "xxxxx ";
String Algorithm = "DES "; // 定义 加密算法,可用 DES,DESede,BlowfishKeyGenerator keygen = KeyGenerator.getInstance(Algorithm);
keygen.init(new SecureRandom(s.getBytes()));
SecretKey deskey = keygen.generateKey();

------解决方案--------------------
key每次生成都会不同的,你须要把key保存起来,以供使用.如下就是把它存到文件中
KeyGenerator keygen=KeyGenerator.getInstance( "AES ");
SecureRandom random =new SecureRandom();
keygen.init(random);
SecretKey key=keygen.generateKey();
ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream( "kmpassword.key "));
out.writeObject(key);
out.close();
当然,你也可存到别的地方,如数据库等