<转载>JAVA AES DES MD5 加密字符串

来源:互联网 发布:java线程同步的方法() 编辑:程序博客网 时间:2024/04/28 04:47


效果AES加密:加密前:test3444加密后:88E7373C834F8C1A505172F8BD33579A解密后:test3444

 效果DES加密: 加密前:  要加密的字符串 test 加密后: pCpv76PEwJR/7bab04sKNdpzNvL7uHYE5AIfLjpNh2E= 解密后:  要加密的字符串 test


效果MD5加密: 加密前:  1989-03-03 加密后: CFCD208495D565EF66E7DFF9F98764DA


import java.io.UnsupportedEncodingException;import java.security.InvalidKeyException;import java.security.NoSuchAlgorithmException;import java.security.SecureRandom;import javax.crypto.BadPaddingException;import javax.crypto.Cipher;import javax.crypto.IllegalBlockSizeException;import javax.crypto.KeyGenerator;import javax.crypto.NoSuchPaddingException;import javax.crypto.SecretKey;import javax.crypto.spec.SecretKeySpec;public class AESTest{    /**     * 加密     *      * @param content 需要加密的内容     * @param password  加密密码     * @return     */    public static byte[] encrypt(String content, String password)    {        try        {            KeyGenerator kgen = KeyGenerator.getInstance("AES");            kgen.init(128, new SecureRandom(password.getBytes()));            SecretKey secretKey = kgen.generateKey();            byte[] enCodeFormat = secretKey.getEncoded();            SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");            Cipher cipher = Cipher.getInstance("AES");// 创建密码器            byte[] byteContent = content.getBytes("utf-8");            cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化            byte[] result = cipher.doFinal(byteContent);            return result; // 加密        }        catch (NoSuchAlgorithmException e)        {            e.printStackTrace();        }        catch (NoSuchPaddingException e)        {            e.printStackTrace();        }        catch (InvalidKeyException e)        {            e.printStackTrace();        }        catch (UnsupportedEncodingException e)        {            e.printStackTrace();        }        catch (IllegalBlockSizeException e)        {            e.printStackTrace();        }        catch (BadPaddingException e)        {            e.printStackTrace();        }        return null;    }    /**解密     * @param content  待解密内容     * @param password 解密密钥     * @return     */    public static byte[] decrypt(byte[] content, String password)    {        try        {            KeyGenerator kgen = KeyGenerator.getInstance("AES");            kgen.init(128, new SecureRandom(password.getBytes()));            SecretKey secretKey = kgen.generateKey();            byte[] enCodeFormat = secretKey.getEncoded();            SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");            Cipher cipher = Cipher.getInstance("AES");// 创建密码器            cipher.init(Cipher.DECRYPT_MODE, key);// 初始化            byte[] result = cipher.doFinal(content);            return result; // 加密        }        catch (NoSuchAlgorithmException e)        {            e.printStackTrace();        }        catch (NoSuchPaddingException e)        {            e.printStackTrace();        }        catch (InvalidKeyException e)        {            e.printStackTrace();        }        catch (IllegalBlockSizeException e)        {            e.printStackTrace();        }        catch (BadPaddingException e)        {            e.printStackTrace();        }        return null;    }    /**将二进制转换成16进制     * @param buf     * @return     */    public static String parseByte2HexStr(byte buf[])    {        StringBuffer sb = new StringBuffer();        for (int i = 0; i < buf.length; i++)        {            String hex = Integer.toHexString(buf[i] & 0xFF);            if (hex.length() == 1)            {                hex = '0' + hex;            }            sb.append(hex.toUpperCase());        }        return sb.toString();    }    /**将16进制转换为二进制     * @param hexStr     * @return     */    public static byte[] parseHexStr2Byte(String hexStr)    {        if (hexStr.length() < 1)            return null;        byte[] result = new byte[hexStr.length() / 2];        for (int i = 0; i < hexStr.length() / 2; i++)        {            int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16);            int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2), 16);            result[i] = (byte)(high * 16 + low);        }        return result;    }    /**     * @param args     */    public static void main(String[] args)    {        String content = "test3444";        String password = "11";        // 加密        System.out.println("加密前:" + content);        byte[] encryptResult = encrypt(content, password);        String encryptResultStr = parseByte2HexStr(encryptResult);        System.out.println("加密后:" + encryptResultStr);        // 解密        byte[] decryptFrom = parseHexStr2Byte(encryptResultStr);        byte[] decryptResult = decrypt(decryptFrom, password);        System.out.println("解密后:" + new String(decryptResult));    }}
 DES import java.io.FileOutputStream;  import java.io.InputStream;  import java.io.OutputStream;  import java.security.Key;  import java.security.SecureRandom;     import javax.crypto.Cipher;  import javax.crypto.CipherInputStream;  import javax.crypto.CipherOutputStream;  import javax.crypto.KeyGenerator;     import sun.misc.BASE64Decoder;  import sun.misc.BASE64Encoder;     public class DESUtil {         Key key ;         public DESUtil() {         }         public DESUtil(String str) {         setKey(str); // 生成密匙      }         public Key getKey() {         return key ;      }         public void setKey(Key key) {         this . key = key;      }         /**       * 根据参数生成 KEY       */      public void setKey(String strKey) {         try {             KeyGenerator _generator = KeyGenerator.getInstance ( "DES" );             _generator.init( new SecureRandom(strKey.getBytes()));             this . key = _generator.generateKey();             _generator = null ;         } catch (Exception e) {             throw new RuntimeException(                    "Error initializing SqlMap class. Cause: " + e);         }      }         /**       * 加密 String 明文输入 ,String 密文输出       */      public String encryptStr(String strMing) {         byte [] byteMi = null ;         byte [] byteMing = null ;         String strMi = "" ;         BASE64Encoder base64en = new BASE64Encoder();         try {             byteMing = strMing.getBytes( "UTF8" );             byteMi = this .encryptByte(byteMing);             strMi = base64en.encode(byteMi);         } catch (Exception e) {             throw new RuntimeException(                    "Error initializing SqlMap class. Cause: " + e);         } finally {             base64en = null ;             byteMing = null ;             byteMi = null ;         }         return strMi;      }         /**       * 解密 以 String 密文输入 ,String 明文输出       *       * @param strMi       * @return       */      public String decryptStr(String strMi) {         BASE64Decoder base64De = new BASE64Decoder();         byte [] byteMing = null ;         byte [] byteMi = null ;         String strMing = "" ;         try {             byteMi = base64De.decodeBuffer(strMi);             byteMing = this .decryptByte(byteMi);             strMing = new String(byteMing, "UTF8" );         } catch (Exception e) {             throw new RuntimeException(                    "Error initializing SqlMap class. Cause: " + e);         } finally {             base64De = null ;             byteMing = null ;             byteMi = null ;         }         return strMing;      }         /**       * 加密以 byte[] 明文输入 ,byte[] 密文输出       *       * @param byteS       * @return       */      private byte [] encryptByte( byte [] byteS) {         byte [] byteFina = null ;         Cipher cipher;         try {             cipher = Cipher.getInstance ( "DES" );             cipher.init(Cipher. ENCRYPT_MODE , key );             byteFina = cipher.doFinal(byteS);         } catch (Exception e) {             throw new RuntimeException(                    "Error initializing SqlMap class. Cause: " + e);         } finally {             cipher = null ;         }         return byteFina;      }         /**       * 解密以 byte[] 密文输入 , 以 byte[] 明文输出       *       * @param byteD       * @return       */      private byte [] decryptByte( byte [] byteD) {         Cipher cipher;         byte [] byteFina = null ;         try {             cipher = Cipher.getInstance ( "DES" );             cipher.init(Cipher. DECRYPT_MODE , key );             byteFina = cipher.doFinal(byteD);         } catch (Exception e) {             throw new RuntimeException(                    "Error initializing SqlMap class. Cause: " + e);         } finally {             cipher = null ;         }         return byteFina;      }         /**       * 文件 file 进行加密并保存目标文件 destFile 中       *       * @param file       *             要加密的文件 如 c:/test/srcFile.txt       * @param destFile       *             加密后存放的文件名 如 c:/ 加密后文件 .txt       */      public void encryptFile(String file, String destFile) throws Exception {         Cipher cipher = Cipher.getInstance ( "DES" );         // cipher.init(Cipher.ENCRYPT_MODE, getKey());         cipher.init(Cipher. ENCRYPT_MODE , this . key );         InputStream is = new FileInputStream(file);         OutputStream out = new FileOutputStream(destFile);         CipherInputStream cis = new CipherInputStream(is, cipher);         byte [] buffer = new byte [1024];         int r;         while ((r = cis.read(buffer)) > 0) {             out.write(buffer, 0, r);         }         cis.close();         is.close();         out.close();      }         /**       * 文件采用 DES 算法解密文件       *       * @param file       *             已加密的文件 如 c:/ 加密后文件 .txt *       * @param destFile       *             解密后存放的文件名 如 c:/ test/ 解密后文件 .txt       */      public void decryptFile(String file, String dest) throws Exception {         Cipher cipher = Cipher.getInstance ( "DES" );         cipher.init(Cipher. DECRYPT_MODE , this . key );         InputStream is = new FileInputStream(file);         OutputStream out = new FileOutputStream(dest);         CipherOutputStream cos = new CipherOutputStream(out, cipher);         byte [] buffer = new byte [1024];         int r;         while ((r = is.read(buffer)) >= 0) {             cos.write(buffer, 0, r);         }         cos.close();         out.close();         is.close();      }         public static void main(String[] args) throws Exception {         DESUtil des = new DESUtil( "" );         // DES 加密文件         // des.encryptFile("G:/test.doc", "G:/ 加密 test.doc");         // DES 解密文件         // des.decryptFile("G:/ 加密 test.doc", "G:/ 解密 test.doc");         String str1 = " 要加密的字符串 test" ;         // DES 加密字符串         String str2 = des.encryptStr(str1);         // DES 解密字符串         String deStr = des.decryptStr(str2);         System. out .println( " 加密前: " + str1);         System. out .println( " 加密后: " + str2);         System. out .println( " 解密后: " + deStr);      }  }   


MD5:
public class PwdDigest {        public static void main(String[] args){passwordDigest("0");}    /**      * @param myinfo      * 为字符串加密      * @return      */      public static String passwordDigest(String myinfo) {          String newPwd = "1989-03-03";          try {              java.security.MessageDigest alga=java.security.MessageDigest.getInstance("MD5");  //          java.security.MessageDigest alga = java.security.MessageDigest.getInstance("SHA-1");              alga.update(myinfo.getBytes());              byte[] digesta = alga.digest();              newPwd = byte2hex(digesta);              System.out.println(newPwd);         } catch (java.security.NoSuchAlgorithmException e) {              System.out.println("密码加密异常:非法摘要算法"+e);  //            Loggers.error("密码加密异常:非法摘要算法"+e);          }          return newPwd;        }        public static String byte2hex(byte[] b) // 二行制转字符串      {          String hs = "";          String stmp = "";          for (int n = 0; n < b.length; n++) {              stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));              if (stmp.length() == 1){                  hs = hs + "0" + stmp;              }else{                  hs = hs + stmp;              }          }          return hs.toUpperCase();      }  }