package com.joye3g.ed; public class Main { public static void main(String[] args) throws Exception { // initThreeDES(); // initAES(); // initRSA(); // initMD5(); // initSHA(); initHMAC(); } public static void initThreeDES(){ ThreeDES des = new ThreeDES(); String msg = "安全编程技术_加密解密"; System.out.println("明文是" + msg); byte[] enc = des.createEncryptor(msg); System.out.println("密文是" + new String(enc)); byte[] dec = des.createDecryptor(enc); System.out.println("解密后的结果是" + new String(dec)); } public static void initAES(){ AES aes = new AES(); String msg = "安全编程技术_加密解密"; System.out.println("明文是" + msg); byte[] enc = aes.createEncryptor(msg); System.out.println("密文是" + new String(enc)); byte[] dec = aes.createDecryptor(enc); System.out.println("解密后的结果是" + new String(dec)); } public static void initRSA(){ RSA rsa = new RSA(); String msg = "安全编程技术_加密解密"; System.out.println("明文是:" + msg); //用公钥加密 byte[] srcBytes = msg.getBytes(); byte[] resultBytes = rsa.encrypt(srcBytes); String result = new String(resultBytes); System.out.println("用公钥加密后密文是:" + result); //用私钥解密 byte[] decBytes = rsa.decrypt(resultBytes); String dec = new String(decBytes); System.out.println("用私钥解密后结果是:" + dec); } public static void initMD5(){ String msg = "安全编程技术_加密解密"; System.out.println("明文是" + msg); MD5 md5 = new MD5(); byte[] resultBytes = md5.encrypt(msg); String result = new String(resultBytes); System.out.println("密文是" + result); } public static void initSHA(){ String msg = "安全编程技术_加密解密"; System.out.println("明文是" + msg); SHA sha = new SHA(); byte[] resultBytes = sha.encrypt(msg); String result = new String(resultBytes); System.out.println("密文是" + result); } public static void initHMAC(){ //要计算消息验证码的字符串 String str="安全编程技术_加密解密"; System.out.println("明文是:" + str); HMAC hmac = new HMAC(); byte[] certifyCode = hmac.createEncryptor(str); System.out.println("密文是:" + new String(certifyCode)); } }
AES:
package com.joye3g.ed; import java.security.NoSuchAlgorithmException; import java.security.Security; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.NoSuchPaddingException; import javax.crypto.SecretKey; public class AES { // KeyGenerator提供对称密钥生成器的功能,支持各种算法 private KeyGenerator keyGenerator; // SecretKey负责保存对称密钥 private SecretKey secretKey; // Cipher负责完成加密或解密工作 private Cipher cipher; // 该字节数组负责保存加密的结果 private byte[] cipherByte; @SuppressWarnings("restriction") public AES() { Security.addProvider(new com.sun.crypto.provider.SunJCE()); // 实例化支持AES算法的密钥生成器,算法名称用AES try { keyGenerator = KeyGenerator.getInstance("AES"); // 生成密钥 secretKey = keyGenerator.generateKey(); // 生成Cipher对象,指定其支持AES算法 cipher = Cipher.getInstance("AES"); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } } /* 对字符串str加密 */ public byte[] createEncryptor(String str) { try { // 根据密钥对Cipher对象进行初始化,ENCRYPT_MODE表示加密模式 cipher.init(Cipher.ENCRYPT_MODE, secretKey); byte[] src = str.getBytes(); // 将加密结果保存进cipherByte cipherByte = cipher.doFinal(src); } catch (java.security.InvalidKeyException ex) { ex.printStackTrace(); } catch (javax.crypto.BadPaddingException ex) { ex.printStackTrace(); } catch (javax.crypto.IllegalBlockSizeException ex) { ex.printStackTrace(); } return cipherByte; } /* 对字节数组buff解密 */ public byte[] createDecryptor(byte[] buff) { try { // 根据密钥对Cipher对象进行初始化,ENCRYPT_MODE表示解密模式 cipher.init(Cipher.DECRYPT_MODE, secretKey); // 将得到明文存入cipherByte字符数组 cipherByte = cipher.doFinal(buff); } catch (java.security.InvalidKeyException ex) { ex.printStackTrace(); } catch (javax.crypto.BadPaddingException ex) { ex.printStackTrace(); } catch (javax.crypto.IllegalBlockSizeException ex) { ex.printStackTrace(); } return cipherByte; } }
DES:
package com.joye3g.ed; import java.security.NoSuchAlgorithmException; import java.security.Security; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.NoSuchPaddingException; import javax.crypto.SecretKey; public class DES { // KeyGenerator提供对称密钥生成器的功能,支持各种算法 private KeyGenerator keyGenerator; // SecretKey负责保存对称密钥 private SecretKey secretKey; // Cipher负责完成加密或解密工作 private Cipher cipher; // 该字节数组负责保存加密的结果 private byte[] cipherByte; @SuppressWarnings("restriction") public DES() { Security.addProvider(new com.sun.crypto.provider.SunJCE()); try { // 实例化支持DES算法的密钥生成器(算法名称命名需按规定,否则抛出异常) keyGenerator = KeyGenerator.getInstance("DES"); // 生成密钥 secretKey = keyGenerator.generateKey(); // 生成Cipher对象,指定其支持DES算法 cipher = Cipher.getInstance("DES"); } catch (NoSuchAlgorithmException ex) { ex.printStackTrace(); } catch (NoSuchPaddingException ex) { ex.printStackTrace(); } } /* 对字符串str加密 */ public byte[] createEncryptor(String str) { try { // 根据密钥对Cipher对象进行初始化,ENCRYPT_MODE表示加密模式 cipher.init(Cipher.ENCRYPT_MODE, secretKey); byte[] src = str.getBytes(); // 将加密结果保存进cipherByte cipherByte = cipher.doFinal(src); } catch (java.security.InvalidKeyException ex) { ex.printStackTrace(); } catch (javax.crypto.BadPaddingException ex) { ex.printStackTrace(); } catch (javax.crypto.IllegalBlockSizeException ex) { ex.printStackTrace(); } return cipherByte; } /* 对字节数组buff解密 */ public byte[] createDecryptor(byte[] buff) { try { // 根据密钥对Cipher对象进行初始化,ENCRYPT_MODE表示解密模式 cipher.init(Cipher.DECRYPT_MODE, secretKey); // 将得到的明文存入cipherByte字符数组 cipherByte = cipher.doFinal(buff); } catch (java.security.InvalidKeyException ex) { ex.printStackTrace(); } catch (javax.crypto.BadPaddingException ex) { ex.printStackTrace(); } catch (javax.crypto.IllegalBlockSizeException ex) { ex.printStackTrace(); } return cipherByte; } }
HMAC:
package com.joye3g.ed; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import javax.crypto.KeyGenerator; import javax.crypto.Mac; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; public class HMAC { private Mac mac; public HMAC() { try { // 用DES算法得到计算验证码的密钥 KeyGenerator keyGen = KeyGenerator.getInstance("DESede"); SecretKey key = keyGen.generateKey(); byte[] keyByte = key.getEncoded(); // 生成MAC对象 SecretKeySpec SKS = new SecretKeySpec(keyByte, "HMACMD5"); mac = Mac.getInstance("HMACMD5"); mac.init(SKS); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } } public byte[] createEncryptor(String str) { // 传入要计算验证码的字符串 byte[] certifyCode = null; try { mac.update(str.getBytes("UTF8")); // 计算验证码 certifyCode = mac.doFinal(); return certifyCode; } catch (IllegalStateException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return null; } }
MD5:
package com.joye3g.ed; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class MD5 { private MessageDigest md5; public MD5() { //根据MD5算法生成MessageDigest对象 try { md5 = MessageDigest.getInstance("MD5"); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } } // MD5加密 public byte[] encrypt(String msg) { byte[] srcBytes = msg.getBytes(); //使用srcBytes更新摘要 md5.update(srcBytes); //完成哈希计算,得到并返回密文 return md5.digest(); } }
RSA:
package com.joye3g.ed; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.NoSuchAlgorithmException; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; import javax.crypto.Cipher; import javax.crypto.NoSuchPaddingException; public class RSA { private RSAPrivateKey privateKey; private RSAPublicKey publicKey; private Cipher cipher; public RSA() { try { // KeyPairGenerator类用于生成公钥和私钥对,基于RSA算法生成对象 KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA"); // 初始化密钥对生成器,密钥大小为1024位 keyPairGen.initialize(1024); // 生成一个密钥对保存在keyPair中 KeyPair keyPair = keyPairGen.generateKeyPair(); // 得到私钥 privateKey = (RSAPrivateKey) keyPair.getPrivate(); // 得到公钥 publicKey = (RSAPublicKey) keyPair.getPublic(); // 根据私钥对Cipher对象进行初始化 cipher = Cipher.getInstance("RSA"); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } } /* 对srcBytes加密 */ public byte[] encrypt(byte[] srcBytes) { if (publicKey != null) { try { // 根据公钥,对Cipher对象进行初始化 cipher.init(Cipher.ENCRYPT_MODE, publicKey); // 将加密结果保存进resultBytes byte[] resultBytes = cipher.doFinal(srcBytes); return resultBytes; } catch (Exception e) { e.printStackTrace(); } } return null; } /* 对encBytes解密 */ public byte[] decrypt(byte[] encBytes) { if (privateKey != null) { try { cipher.init(Cipher.DECRYPT_MODE, privateKey); // 将解密结果保存进resultBytes byte[] decBytes = cipher.doFinal(encBytes); return decBytes; } catch (Exception e) { e.printStackTrace(); } } return null; } }
SHA:
package com.joye3g.ed; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class SHA { private MessageDigest md5; public SHA() { //根据MD5算法生成MessageDigest对象 try { md5 = MessageDigest.getInstance("MD5"); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } } // MD5加密 public byte[] encrypt(String msg) { byte[] srcBytes = msg.getBytes(); //使用srcBytes更新摘要 md5.update(srcBytes); //完成哈希计算,得到并返回密文 return md5.digest(); } }
3DES:
package com.joye3g.ed; import java.security.NoSuchAlgorithmException; import java.security.Security; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.NoSuchPaddingException; import javax.crypto.SecretKey; public class ThreeDES { // KeyGenerator提供对称密钥生成器的功能,支持各种算法 private KeyGenerator keyGenerator; // SecretKey负责保存对称密钥 private SecretKey secretKey; // Cipher负责完成加密或解密工作 private Cipher cipher; // 该字节数组负责保存加密的结果 private byte[] cipherByte; @SuppressWarnings("restriction") public ThreeDES() { Security.addProvider(new com.sun.crypto.provider.SunJCE()); // 实例化支持3DES算法的密钥生成器,算法名称用DESede try { keyGenerator = KeyGenerator.getInstance("DESede"); // 生成密钥 secretKey = keyGenerator.generateKey(); // 生成Cipher对象,指定其支持3DES算法 cipher = Cipher.getInstance("DESede"); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } } /* 对字符串str加密 */ public byte[] createEncryptor(String str) { try { // 根据密钥对Cipher对象进行初始化,ENCRYPT_MODE表示加密模式 cipher.init(Cipher.ENCRYPT_MODE, secretKey); byte[] src = str.getBytes(); // 将加密结果保存进cipherByte cipherByte = cipher.doFinal(src); } catch (java.security.InvalidKeyException ex) { ex.printStackTrace(); } catch (javax.crypto.BadPaddingException ex) { ex.printStackTrace(); } catch (javax.crypto.IllegalBlockSizeException ex) { ex.printStackTrace(); } return cipherByte; } /* 对字节数组buff解密 */ public byte[] createDecryptor(byte[] buff) { try { // 根据密钥对Cipher对象进行初始化,ENCRYPT_MODE表示解密模式 cipher.init(Cipher.DECRYPT_MODE, secretKey); // 将得到明文存入cipherByte字符数组 cipherByte = cipher.doFinal(buff); } catch (java.security.InvalidKeyException ex) { ex.printStackTrace(); } catch (javax.crypto.BadPaddingException ex) { ex.printStackTrace(); } catch (javax.crypto.IllegalBlockSizeException ex) { ex.printStackTrace(); } return cipherByte; } }