以下為加密的工具類:
import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.PrivateKey; import java.security.PublicKey; 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 com.sun.xml.internal.messaging.saaj.packaging.mime.util.BASE64DecoderStream;
import com.sun.xml.internal.messaging.saaj.packaging.mime.util.BASE64EncoderStream;
public class util { /** * 傳入名文和公鑰鑰對數據進行RSA解密 * <br>生成時間:2014年5月2日 下午2:38:13 * <br>返回值:String * <br>@param src * <br>@param pubkey * <br>@return */ public static String rsaEncoding(String src,PublicKey pubkey){ try { Cipher cip = Cipher.getInstance("RSA"); cip.init(cip.ENCRYPT_MODE, pubkey); byte[] by = cip.doFinal(src.getBytes()); return new String(BASE64EncoderStream.encode(by)); } catch (NoSuchAlgorithmException e) { throw new RuntimeException(e); } catch (NoSuchPaddingException e) { throw new RuntimeException(e); } catch (InvalidKeyException e) { throw new RuntimeException(e); } catch (IllegalBlockSizeException e) { throw new RuntimeException(e); } catch (BadPaddingException e) { throw new RuntimeException(e); } } /** * 傳入RSA密文和私鑰對數據進行解密 * <br>生成時間:2014年5月2日 下午2:37:08 * <br>返回值:String * <br>@param sec * <br>@param privkey * <br>@return */ public static String rsaDeEncoding(String sec,PrivateKey privkey){ try { Cipher cip = Cipher.getInstance("RSA"); cip.init(cip.DECRYPT_MODE, privkey); byte[] by = BASE64DecoderStream.decode(sec.getBytes()); return new String(cip.doFinal(by)); } catch (NoSuchAlgorithmException e) { throw new RuntimeException(e); } catch (NoSuchPaddingException e) { throw new RuntimeException(e); } catch (InvalidKeyException e) { throw new RuntimeException(e); } catch (IllegalBlockSizeException e) { throw new RuntimeException(e); } catch (BadPaddingException e) { throw new RuntimeException(e); } } /** * 傳入字符串、密鑰,並加密字符串(對稱加密加密),支持:DES、AES、DESede(3DES) * <br>生成時間:2014年5月2日 下午12:05:44 * <br>返回值:String 密文 * <br>@param src * <br>@param key * <br>@param method(DES、AES、DESede) * <br>@return */ //對稱加密加密 public static String doubKeyEncoding(String src,String keysrc,String method) { SecretKey key; try { //生成密鑰 KeyGenerator kg = KeyGenerator.getInstance(keysrc); //初始化此密鑰生成器。 kg.init(new SecureRandom(keysrc.getBytes("utf-8"))); key = kg.generateKey(); //加密 Cipher ciph = Cipher.getInstance(method); ciph.init(Cipher.ENCRYPT_MODE, key); ciph.update(src.getBytes("utf-8")); //使用64進行編碼,一避免出現丟數據情景 byte[] by = BASE64EncoderStream.encode(ciph.doFinal()); return new String(by); } catch (NoSuchAlgorithmException e) { throw new RuntimeException(e); } catch (NoSuchPaddingException e) { throw new RuntimeException(e); } catch (InvalidKeyException e) { throw new RuntimeException(e); } catch (IllegalBlockSizeException e) { throw new RuntimeException(e); } catch (BadPaddingException e) { throw new RuntimeException(e); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } } /** * 傳入字符串、密鑰、加密方式,並解密字符串(對稱加密解密密),支持:DES、AES、DESede(3DES) * <br>生成時間:2014年5月2日 下午1:12:13 * <br>返回值:String 密鑰原文 * <br>@param sec * <br>@param key * <br>@param method(DES、AES、DESede) * <br>@return */ public static String doubKeyDencoding(String sec,String keysrc,String method) { SecretKey key; try { //生成密鑰 KeyGenerator kg = KeyGenerator.getInstance(keysrc); //初始化此密鑰生成器。 kg.init(new SecureRandom(keysrc.getBytes("utf-8"))); key = kg.generateKey(); //加密 Cipher ciph = Cipher.getInstance(method); ciph.init(ciph.DECRYPT_MODE, key); //使用64進行解碼,一避免出現丟數據情況 byte[] by = BASE64DecoderStream.decode(sec.getBytes()); ciph.update(by); return new String(ciph.doFinal()); } catch (NoSuchAlgorithmException e) { throw new RuntimeException(e); } catch (NoSuchPaddingException e) { throw new RuntimeException(e); } catch (InvalidKeyException e) { throw new RuntimeException(e); } catch (IllegalBlockSizeException e) { throw new RuntimeException(e); } catch (BadPaddingException e) { throw new RuntimeException(e); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } } /** * 單向信息加密(信息摘要),支持:md5、md2、SHA(SHA-1,SHA1)、SHA-256、SHA-384、SHA-512, * <br>生成時間:2014年5月2日 上午11:13:44 * <br>返回值:String 加密后的密文 * <br>@param src 傳入加密字符串(明文) * <br>@param method 指定算法(md5、md2、SHA(SHA-1,SHA1)、SHA-256、SHA-384、SHA-512) * <br>@return */ public static String ecodingPasswd(String src,String method){ try { //信息摘要算法 MessageDigest md5 = MessageDigest.getInstance(method); md5.update(src.getBytes()); byte[] encoding = md5.digest(); //使用64進行編碼,一避免出現丟數據情景 return new String(BASE64EncoderStream.encode(encoding)); } catch (NoSuchAlgorithmException e) { throw new RuntimeException(e+"加密失敗!!"); } } }
以下為測試類
import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.NoSuchAlgorithmException; import java.security.PrivateKey; import java.security.PublicKey; import org.junit.Test; import com.shuqi.utils.util; public class test { @Test public void ecoding() { // //MD5 加密 // System.out.println("md5"+util.ecodingPasswd("shuqi", "md5")); // System.out.println("md2"+util.ecodingPasswd("shuqi", "md2")); // //sha加密 // System.out.println("sha"+util.ecodingPasswd("shuqi", "sha")); // System.out.println("sha-1"+util.ecodingPasswd("shuqi", "sha-1")); // System.out.println("sha1"+util.ecodingPasswd("shuqi", "sha1")); // System.out.println("sha-256"+util.ecodingPasswd("shuqi", "sha-256")); // System.out.println("sha-384"+util.ecodingPasswd("shuqi", "sha-384")); // System.out.println("sha-512"+util.ecodingPasswd("shuqi", "sha-512")); // String mi = util.doubKeyEncoding("hehe", "shuqi", "AES"); // String ming = util.doubKeyDencoding(mi, "shuqi", "AES"); // System.out.println("AES加密解密"); // System.out.println("加密hehhe,密文 >>> "+mi); // System.out.println("解密"+mi+",明文 >>> "+ming); // // mi = util.doubKeyEncoding("hehe", "shuqi", "DES"); // ming = util.doubKeyDencoding(mi, "shuqi", "DES"); // System.out.println("DES加密解密"); // System.out.println("加密hehhe,密文 >>> "+mi); // System.out.println("解密"+mi+",明文 >>> "+ming); // // mi = util.doubKeyEncoding("hehe", "shuqi", "DESede"); // ming = util.doubKeyDencoding(mi, "shuqi", "DESede"); // System.out.println("DESede加密解密"); // System.out.println("加密hehhe,密文 >>> "+mi); // System.out.println("解密"+mi+",明文 >>> "+ming); /** * RSA算法的驗證 */ try { //實例化一個密鑰對生成器 KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); //得到密鑰對對象 KeyPair kp = kpg.genKeyPair(); PrivateKey prikay = kp.getPrivate(); PublicKey pubkey = kp.getPublic(); String mi = util.rsaEncoding("shuqi", pubkey); String ming = util.rsaDeEncoding(mi, prikay); System.out.println(ming+" :: "+mi); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } } }
參考文章:shibenjie的博文 snowolf的博文
