啊,有点小注释,懒得介绍了,就贴个代码吧,大意理解就可以了。
1 package jdbc.pro.lin; 2 3 import java.security.InvalidKeyException; 4 import java.security.MessageDigest; 5 import java.security.NoSuchAlgorithmException; 6 7 import javax.crypto.KeyGenerator; 8 import javax.crypto.Mac; 9 import javax.crypto.SecretKey; 10 import javax.crypto.spec.SecretKeySpec; 11 12 import org.apache.commons.codec.binary.Base64; 13 14 public class MyMessageDigest { 15 public static final String PLAIN_TEXT = "i m a sample"; 16 public static final String MD_ALGORITHM = "MD5"; 17 public static final String SHA_ALGORITHM = "SHA-512"; 18 public static final String MAC_ALGORITHM = "HmacSHA512"; 19 20 public static void main(String[] args) { 21 System.out.println("MD5: " + MD5(PLAIN_TEXT.getBytes())); 22 System.out.println("SHA-512: " + SHA(PLAIN_TEXT.getBytes())); 23 System.out.println("HmacSHA512:" + MAC(PLAIN_TEXT.getBytes())); 24 } 25 26 /** 27 * 1.消息摘要算法,MD家族,有MD2 MD4 MD5,其中MD4 JDK不支持 28 * 29 * @param plainText 30 * @return 31 */ 32 public static String MD5(byte[] plainText) { 33 MessageDigest messageDigest; 34 try { 35 messageDigest = MessageDigest.getInstance(MD_ALGORITHM); 36 return Base64.encodeBase64String(messageDigest.digest(plainText)); 37 } catch (NoSuchAlgorithmException e) { 38 // TODO Auto-generated catch block 39 e.printStackTrace(); 40 } 41 return null; 42 43 } 44 45 /** 46 * 2.SHA Security Hash Algorithm 安全散列算法,固定长度摘要信息 SHA-1 SHA-2( SHA-224 47 * SHA-256 SHA-384 SHA-512) 使用的依然是MessageDigest类,JDK不支持224 48 * 49 * @param plainText 50 * @return 51 */ 52 public static String SHA(byte[] plainText) { 53 MessageDigest messageDigest; 54 try { 55 messageDigest = MessageDigest.getInstance(SHA_ALGORITHM); 56 return Base64.encodeBase64String(messageDigest.digest(plainText)); 57 } catch (Exception e) { 58 e.printStackTrace(); 59 } 60 return null; 61 } 62 63 /** 64 * 3.MAC(Message Authentication Code) 消息认证码算法,是含有密钥散列函数算法。 65 * 兼容了MD和SHA的特性。 66 * 加密过程三步走,与后面要介绍的对称加密和非对称加密是相似的 67 * 1) 传入算法,实例化一个加密器 68 * 2) 传入密钥,初始化加密器 69 * 3) 调用doFinal方法进行加密 70 * @param plainText 71 * @return 72 */ 73 public static String MAC(byte[] plainText) { 74 75 try { 76 byte[] secretBytes = generatorMACSecretKey(); 77 SecretKey key = restoreMACSecretKey(secretBytes); 78 Mac mac = Mac.getInstance(MAC_ALGORITHM); 79 mac.init(key); 80 return Base64.encodeBase64String(mac.doFinal(plainText)); 81 } catch (NoSuchAlgorithmException | InvalidKeyException e) { 82 // TODO Auto-generated catch block 83 e.printStackTrace(); 84 } 85 return null; 86 87 } 88 89 /** 90 * MAC生成随机密钥 两步走 1.创建一个KeyGenerator 2.调用KeyGenerator.generateKey方法 91 * 92 * @return 93 */ 94 public static byte[] generatorMACSecretKey() { 95 KeyGenerator keyGenerator; 96 try { 97 keyGenerator = KeyGenerator.getInstance(MAC_ALGORITHM); 98 SecretKey key = keyGenerator.generateKey(); 99 return key.getEncoded(); 100 } catch (NoSuchAlgorithmException e) { 101 // TODO Auto-generated catch block 102 e.printStackTrace(); 103 } 104 return null; 105 } 106 107 /** 108 * 还原密钥 109 * 110 * @param secretBytes 111 * @return 112 */ 113 public static SecretKey restoreMACSecretKey(byte[] secretBytes) { 114 SecretKey key = new SecretKeySpec(secretBytes, MAC_ALGORITHM); 115 return key; 116 } 117 }
时间: 2024-09-26 20:08:27