`
fcm915
  • 浏览: 111043 次
  • 性别: Icon_minigender_1
  • 来自: 泰安
社区版块
存档分类
最新评论

JAVA单向加密(MD5,SHA,MAC)

阅读更多

具体代码如下:


import java.security.MessageDigest;

import javax.crypto.KeyGenerator;
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

/** *//**
 * 加密(主要有:MD4,SHA,MAC)
 *
 * @author kinkding
 * @history 2009-6-3
 */
public class MyEncrypt {
    /** *//** MD5 加密 */
    public static byte[] encryptMD5(byte[] data) throws Exception {
        MessageDigest md5 = MessageDigest.getInstance("MD5");
        md5.update(data);
        return md5.digest();
    }

    /** *//** SHA 加密 */
    public static byte[] encryptSHA(byte[] data) throws Exception {
        MessageDigest sha = MessageDigest.getInstance("SHA");
        sha.update(data);
        return sha.digest();
    }

    /** *//** 取得HMAC密钥 */
    public static String getMacKey() throws Exception {
        KeyGenerator keyGenerator = KeyGenerator.getInstance("HmacMD5");
        SecretKey secretKey = keyGenerator.generateKey();
        return new BASE64Encoder().encode(secretKey.getEncoded());
    }

    /** *//** 执行加密 */
    public static byte[] encryptHMAC(byte[] data, String key) throws Exception {
        byte[] bkey = new BASE64Decoder().decodeBuffer(key);
        SecretKey secretKey = new SecretKeySpec(bkey, "HmacMD5");
        Mac mac = Mac.getInstance(secretKey.getAlgorithm());
        mac.init(secretKey);
        return mac.doFinal(data);
    }

    private static String toHex(byte[] buffer) {
        StringBuffer sb = new StringBuffer(buffer.length * 3);
        for (int i = 0; i < buffer.length; i++) {
            sb.append(Character.forDigit((buffer[i] & 0xf0) >> 4, 16));
            sb.append(Character.forDigit(buffer[i] & 0x0f, 16));
        }
        return sb.toString();
    }

    public static void main(String[] args) {
        String msg = "生活真好^_^";
        byte[] data = msg.getBytes();
        try {
            System.out.println("msg:" + msg);
            System.out.println("md5:" + toHex(encryptMD5(data)));
            System.out.println("sha:" + toHex(encryptSHA(data)));
            String key = getMacKey();
            System.out.println("mac key:" + key);
            System.out.println("mac:" + toHex(encryptHMAC(data, key)));
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}


运行效果如下:


msg:生活真好^_^
md5:e0649dfaef57789734e920c7ecb9c4ea
sha:a4bd855836de26b2323778b797629fed4416f12f
mac key:zBPe28oho2H84+Mg8mF4abpd0MQvdjgqgFdX4hmUQQbOGnX1aFq/oQnogsHVIczgx1AZ1s2/ncPz
tBQIGLZUnw==
mac:87f4140161ad43797059e85dd9962897

 

分享到:
评论
1 楼 MyDream83 2011-07-19  
请问有种mac加密返回8个字节  跟你这有什么不同

相关推荐

    单向加密算法的Java实现

    在Java中,常见的单向加密算法包括MD5(Message-Digest Algorithm 5)、SHA(Secure Hash Algorithm)系列以及HMAC(Hash-based Message Authentication Code)。 **BASE64编码** 虽然BASE64不是真正的加密算法,...

    Java 详解单向加密--MD5、SHA和HMAC及简单实现实例

    Java中的单向加密技术主要包括MD5、SHA以及HMAC,这些算法主要用于数据的完整性校验和安全性保护。下面我们将详细探讨这些加密算法及其在Java中的实现。 首先,MD5(Message-Digest Algorithm 5)是一种广泛应用的...

    Java实现常用加密算法——单向加密算法MD5和SHA

    在Eclipse IDE中关联JDK源码可以帮助开发者更深入地理解MD5和SHA单向加密算法在Java中的实现。具体来说,可以解压JDK的src.zip目录到指定位置,并下载OpenJDK的源代码来补充那些不在src.zip中的类文件,例如sun....

    基于JAVA的加密算法(包括10种加密技术)

    Java加密技术(一) 关键字: java 加密基础, base64, md5, mac, sha, 单向加密 。。。。。。。。。。。。。。

    JAVA加密技术.docx

    首先,我们来看基础的单向加密算法,如BASE64、MD5、SHA和HMAC。 **BASE64** 是一种编码方式,而非真正的加密算法。它将任意8位字节序列转化为一种不易被人直接识别的形式,常用于电子邮件和HTTP请求中的数据编码。...

    Java加密技术(一)

    Java提供了丰富的类库来支持各种加密算法,包括单向加密(哈希函数)和双向加密(对称与非对称加密)。本篇文章将主要介绍几种常见的加密方法:BASE64、MD5、SHA和HMAC。 1. **BASE64**:BASE64是一种编码方式,而...

    Java常见加密技术全景展示_附Java代码实现

    Java加密技术涵盖了一系列用于保护数据安全的算法,包括单向加密和双向加密。单向加密,也称为哈希函数,不支持解密过程,主要用于数据校验和完整性验证。Java中常见的单向加密算法有: 1. **BASE64**:并非真正的...

    Java 的IDEA 加密算法加密和数字签名编程

    目前,Java开发工具包(JDK)1.5及以上版本对MD4、MD5、SHA-1等算法提供了支持。通过`java.security.MessageDigest`类,开发者可以轻松地实现消息摘要功能。 ##### 2.2 国内加密技术现状 对于中国而言,虽然可以从...

    java数据加密.pdf

    - 消息摘要:通过单向散列函数(如MD4、MD5、SHA-1)计算出消息的固定长度摘要,用于验证消息的完整性。在Java中,可以使用`java.security.MessageDigest`类来实现消息摘要的生成。例如,下面的代码展示了如何使用...

    Java开发的多种加密解密工具包

    5. **Java Cryptography Extension (JCE)**:Java平台的标准扩展,提供了加密、解密、消息认证码(MAC)和密钥协议等功能。JCE包含各种加密算法的实现,如AES、RSA等,并支持无限强度加密策略。 6. **Key和Cipher...

    Java加密技术介绍.docx

    #### 一、BASE64与单向加密算法MD5&SHA&MAC ##### BASE64 BASE64是一种编码格式,并非真正的加密算法。它主要用于将二进制数据转换成文本格式的数据,以便在网络上传输。由于某些传输协议只支持ASCII字符集,因此...

    密码学加密工具(java-myeclipse10)

    在这个工具中,有13种不同的哈希算法,可能包括MD5、SHA-1、SHA-256、SHA-384、SHA-512等。这些哈希函数广泛应用于数据完整性校验、密码存储等领域,因为它们具有单向性和抗碰撞性。 2. **消息认证码(MAC)**:MAC...

    Java 机密技术 (文本文档)

    首先,基础的单向加密算法主要用于生成信息摘要,它们是非可逆的,即无法通过摘要还原原始数据。其中包括: 1. **BASE64**:实际上是一种编码方式,而非加密算法。它将任意8位字节序列转换成可读性较好的字符序列,...

Global site tag (gtag.js) - Google Analytics