Java实现 Base64、MD5、MAC、HMAC加密
2014-06-10 16:52
531 查看
开始对那些基本的加密还不怎么熟练,然后总结了些,写了一个测试:支持 Base64、MD5、MAC、HMAC加密,长话短说,我们都比较喜欢自己理解,看代码吧!
采用的输UTF-8的格式...
下面是一个测试类,及输入命令
下面呢是控制台输出:
原文:这是一些简单的加密测试
BASE64加密后:6L+Z5piv5LiA5Lqb566A5Y2V55qE5Yqg5a+G5rWL6K+V
BASE64解密后:这是一些简单的加密测试
MD5:76757e30d128e82b14488b115794d959
SHA:6f7afslor1oev1k7k40um57cscuqkjtn
HMAC:782313e944a28a55fc20507e50a9d470
采用的输UTF-8的格式...
package visec; import java.security.MessageDigest; import javax.crypto.KeyGenerator; import javax.crypto.Mac; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import Decoder.BASE64Decoder; import Decoder.BASE64Encoder; /** * 基础加密组件 * @author Visec·Dana * @version 1.0 * @since 1.0 */ public abstract class Coder { public static final String KEY_SHA = "SHA"; public static final String KEY_MD5 = "MD5"; /** * MAC算法可选以下多种算法 * <pre> * HmacMD5 * HmacSHA1 * HmacSHA256 * HmacSHA384 * HmacSHA512 * </pre> */ public static final String KEY_MAC = "HmacMD5"; /** * BASE64解密 * @param key * @return * @throws Exception */ public static byte[] decryptBASE64(String key) throws Exception { return (new BASE64Decoder()).decodeBuffer(key); } /** * BASE64加密 * @param key * @return * @throws Exception */ public static String encryptBASE64(byte[] key) throws Exception { return (new BASE64Encoder()).encodeBuffer(key); } /** * MD5加密 * @param data * @return * @throws Exception */ public static byte[] encryptMD5(byte[] data) throws Exception { MessageDigest md5 = MessageDigest.getInstance(KEY_MD5); md5.update(data); return md5.digest(); } /** * SHA加密 * @param data * @return * @throws Exception */ public static byte[] encryptSHA(byte[] data) throws Exception { MessageDigest sha = MessageDigest.getInstance(KEY_SHA); sha.update(data); return sha.digest(); } /** * 初始化HMAC密钥 * @return * @throws Exception */ public static String initMacKey() throws Exception { KeyGenerator keyGenerator = KeyGenerator.getInstance(KEY_MAC); SecretKey secretKey = keyGenerator.generateKey(); return encryptBASE64(secretKey.getEncoded()); } /** * MAC加密 * @param data * @param key * @return * @throws Exception */ public static byte[] encryptHMAC(byte[] data, String key) throws Exception { SecretKey secretKey = new SecretKeySpec(decryptBASE64(key), KEY_MAC); Mac mac = Mac.getInstance(secretKey.getAlgorithm()); mac.init(secretKey); return mac.doFinal(data); } }
下面是一个测试类,及输入命令
package visec; import java.math.BigInteger; /** * 加密测试 * @author Visec·Dana * @version 1.0 * @since 1.0 */ public class CoderTest { public static void main(String[] args) throws Exception { CoderTest.test(); } public static void test() throws Exception { String inputStr = "这是一些简单的加密测试"; System.err.println("原文:" + inputStr); byte[] inputData = inputStr.getBytes(); String code = Coder.encryptBASE64(inputData); System.err.println("BASE64加密后:" + code); byte[] output = Coder.decryptBASE64(code); String outputStr = new String(output); System.err.println("BASE64解密后:" + outputStr); //单元测试 Junit4[暂时不用...] /*// 验证BASE64加密解密一致性 assertEquals(inputStr, outputStr); // 验证MD5对于同一内容加密是否一致 assertArrayEquals(Coder.encryptMD5(inputData), Coder .encryptMD5(inputData)); // 验证SHA对于同一内容加密是否一致 assertArrayEquals(Coder.encryptSHA(inputData), Coder .encryptSHA(inputData)); String key = Coder.initMacKey(); System.err.println("Mac密钥:/n" + key); // 验证HMAC对于同一内容,同一密钥加密是否一致 assertArrayEquals(Coder.encryptHMAC(inputData, key), Coder.encryptHMAC( inputData, key)); */ BigInteger md5 = new BigInteger(Coder.encryptMD5(inputData)); System.err.println("MD5:" + md5.toString(16)); BigInteger sha = new BigInteger(Coder.encryptSHA(inputData)); System.err.println("SHA:" + sha.toString(32)); BigInteger mac = new BigInteger(Coder.encryptHMAC(inputData, inputStr)); System.err.println("HMAC:" + mac.toString(16)); } }
下面呢是控制台输出:
原文:这是一些简单的加密测试
BASE64加密后:6L+Z5piv5LiA5Lqb566A5Y2V55qE5Yqg5a+G5rWL6K+V
BASE64解密后:这是一些简单的加密测试
MD5:76757e30d128e82b14488b115794d959
SHA:6f7afslor1oev1k7k40um57cscuqkjtn
HMAC:782313e944a28a55fc20507e50a9d470
相关文章推荐
- Java实现 Base64、MD5、MAC、HMAC加密(转)
- Java 详解单向加密--MD5、SHA和HMAC及简单实现实例
- BASE64,MD5,SHA,HMAC加密與解密算法(java)
- BASE64,MD5,SHA,HMAC加密与解密算法(java)
- java实现HMACSHA256(md5私钥key)加密签名
- 【密钥算法】Java加密技术(一)---BASE64、MD5、SHA、HMAC数据加密算法
- Java加密技术之—BASE64,MD5,SHA,HMAC
- BASE64,MD5,SHA,HMAC加密與解密算法(java)
- Java实现的Base64、MD5、3DES工具
- 利用java自带的base64实现加密、解密
- 用Java实现MD5,SHA-1等加密
- Java加密技术——BASE64与单向加密算法MD5&SHA&MAC
- Base64加密及Java代码实现
- MD5实现加密 java
- Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC
- BASE64,MD5,SHA,HMAC加密解决算法
- 用java实现MD5密码加密
- Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC
- java加密 base64,md5,sha
- MD5实现加密 java