- import java.security.MessageDigest;
- import java.security.NoSuchAlgorithmException;
- import java.util.Random;
- import javax.crypto.Cipher;
- import javax.crypto.SecretKey;
- import javax.crypto.SecretKeyFactory;
- import javax.crypto.spec.PBEKeySpec;
- import javax.crypto.spec.PBEParameterSpec;
- public class SecurityUtil {
- char[] passwd = "mykey".toCharArray();
- byte[] salt;
- //加密,即使明文一样每次加密的密文都不一样。
- public byte[] encrypt(String text) throws Exception {
- //
- PBEKeySpec pbks = new PBEKeySpec(passwd);
- // 由口令生成密钥
- SecretKeyFactory kf = SecretKeyFactory.getInstance("PBEWithMD5AndDES");
- SecretKey k = kf.generateSecret(pbks);
- // 生成随机数盐
- salt = new byte[8];
- Random r = new Random();
- r.nextBytes(salt);
- // 创建并初始化密码器
- Cipher cp = Cipher.getInstance("PBEWithMD5AndDES");
- PBEParameterSpec ps = new PBEParameterSpec(salt, 1000);
- cp.init(Cipher.ENCRYPT_MODE, k, ps);
- // 获取明文,执行加密
- byte[] ptext = text.getBytes();
- return cp.doFinal(ptext);
- }
- //解密
- public String decrypt(byte[] ctext, byte[] salt) throws Exception {
- //
- PBEKeySpec pbks = new PBEKeySpec(passwd);
- // 由口令生成密钥
- SecretKeyFactory kf = SecretKeyFactory.getInstance("PBEWithMD5AndDES");
- SecretKey k = kf.generateSecret(pbks);
- // 创建并初始化密码器
- Cipher cp = Cipher.getInstance("PBEWithMD5AndDES");
- PBEParameterSpec ps = new PBEParameterSpec(salt, 1000);
- cp.init(Cipher.DECRYPT_MODE, k, ps);
- byte[] ptext = cp.doFinal(ctext);
- return new String(ptext);
- }
- /**
- * @return Returns the salt.
- */
- public byte[] getSalt() {
- return salt;
- }
- //MD5加密,每次加密都是固定的。
- public String MD5(String plainText) throws NoSuchAlgorithmException {
- MessageDigest md = MessageDigest.getInstance("MD5");
- md.update(plainText.getBytes());
- byte b[] = md.digest();
- int i;
- StringBuffer buf = new StringBuffer("");
- for (int offset = 0; offset < b.length; offset++) {
- i = b[offset];
- if (i < 0)
- i += 256;
- if (i < 16)
- buf.append("0");
- buf.append(Integer.toHexString(i));
- }
- return buf.toString();// 32位的加密
- }
- }
随机加密方法
最新推荐文章于 2024-05-22 17:34:07 发布