加密解密时的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();
当然,你也可存到别的地方,如数据库等