- importjava.security.MessageDigest;
- importjava.security.NoSuchAlgorithmException;
- importjava.util.Random;
- importjavax.crypto.Cipher;
- importjavax.crypto.SecretKey;
- importjavax.crypto.SecretKeyFactory;
- importjavax.crypto.spec.PBEKeySpec;
- importjavax.crypto.spec.PBEParameterSpec;
- publicclassSecurityUtil{
- char[]passwd="mykey".toCharArray();
- byte[]salt;
- //加密,即使明文一样每次加密的密文都不一样。
- publicbyte[]encrypt(Stringtext)throwsException{
- //
- PBEKeySpecpbks=newPBEKeySpec(passwd);
- //由口令生成密钥
- SecretKeyFactorykf=SecretKeyFactory.getInstance("PBEWithMD5AndDES");
- SecretKeyk=kf.generateSecret(pbks);
- //生成随机数盐
- salt=newbyte[8];
- Randomr=newRandom();
- r.nextBytes(salt);
- //创建并初始化密码器
- Ciphercp=Cipher.getInstance("PBEWithMD5AndDES");
- PBEParameterSpecps=newPBEParameterSpec(salt,1000);
- cp.init(Cipher.ENCRYPT_MODE,k,ps);
- //获取明文,执行加密
- byte[]ptext=text.getBytes();
- returncp.doFinal(ptext);
- }
- //解密
- publicStringdecrypt(byte[]ctext,byte[]salt)throwsException{
- //
- PBEKeySpecpbks=newPBEKeySpec(passwd);
- //由口令生成密钥
- SecretKeyFactorykf=SecretKeyFactory.getInstance("PBEWithMD5AndDES");
- SecretKeyk=kf.generateSecret(pbks);
- //创建并初始化密码器
- Ciphercp=Cipher.getInstance("PBEWithMD5AndDES");
- PBEParameterSpecps=newPBEParameterSpec(salt,1000);
- cp.init(Cipher.DECRYPT_MODE,k,ps);
- byte[]ptext=cp.doFinal(ctext);
- returnnewString(ptext);
- }
- /**
- *@returnReturnsthesalt.
- */
- publicbyte[]getSalt(){
- returnsalt;
- }
- //MD5加密,每次加密都是固定的。
- publicStringMD5(StringplainText)throwsNoSuchAlgorithmException{
- MessageDigestmd=MessageDigest.getInstance("MD5");
- md.update(plainText.getBytes());
- byteb[]=md.digest();
- inti;
- StringBufferbuf=newStringBuffer("");
- for(intoffset=0;offset<b.length;offset++){
- i=b[offset];
- if(i<0)
- i+=256;
- if(i<16)
- buf.append("0");
- buf.append(Integer.toHexString(i));
- }
- returnbuf.toString();//32位的加密
- }
- }