测试代码

public class SignatureUtils {
    public static void main(String[] args) throws Exception {
        //测试获取字符串的签名
        System.out.println("字符串1的MD5签名为【" + getStrMessageDigest("1", "MD5") + "】");//【C4CA4238A0B923820DCC509A6F75849B】
        System.out.println("字符串1的SHA1签名为【" + getStrMessageDigest("1", "SHA-1") + "】\n");//【356A192B7913B04C54574D18C28D46E6395428AB】
        //测试获取文件的签名
        System.out.println("下面是两个不同的文件,但是它们的 MD5 都是一样的,这就是科学家通过碰撞破解签名的案例");
        File file1 = new File("E:/HelloWorld-colliding.exe");
        File file2 = new File("E:/GoodbyeWorld-colliding.exe");
        System.out.println("文件1的MD5签名为【" + getFileMessageDigest(file1, "MD5") + "】");//【18FCC4334F44FED60718E7DACD82DDDF】
        System.out.println("文件2的MD5签名为【" + getFileMessageDigest(file2, "MD5") + "】");//【18FCC4334F44FED60718E7DACD82DDDF】
        System.out.println("文件1的SHA1签名为【" + getFileMessageDigest(file1, "SHA-1") + "】");//【0033F995A30FD2CCBF60CC1E7D7DB9E649397668】
        System.out.println("文件2的SHA1签名为【" + getFileMessageDigest(file2, "SHA-1") + "】\n");//【30ACE7E13A7F9DC9ABBAA431241309AC6741E735】
        //获取所有支持的签名算法
        showAllAalogrithm();
    }
    /***
     * 获取所有支持的签名算法
     */
    public static void showAllAalogrithm() {
        System.out.println("所有支持的签名算法");
        Provider[] providers = Security.getProviders();//获取已注册提供者列表
        for (Provider provider : providers) {
            Set<Service> services = provider.getServices();//返回封装取自第一个 Provider支持的算法
            System.out.print(provider.getName() + "\n    ");
            for (Service service : services) {
                System.out.print("【" + service.getAlgorithm() + "】");
            }
            System.out.println();
        }
        //【SHA1PRNG】【SHA1withDSA】【NONEwithDSA】【SHA224withDSA】【SHA256withDSA】【DSA】【MD2】
        //【MD5】【SHA】【SHA-224】【SHA-256】【SHA-384】【SHA-512】【DSA】【DSA】【DSA】【X.509】【JKS】【CaseExactJKS】
        //【DKS】【JavaPolicy】【JavaLoginConfig】【PKIX】【PKIX】【LDAP】【Collection】【com.sun.security.IndexedCollection】
    }
    //******************************************************************************************
    //                                                                   获取字符串的签名
    //******************************************************************************************
    public static String getStrMessageDigest(String input, String algorithm) {
        try {
            //获得指定摘要算法的 MessageDigest 对象
            MessageDigest md = MessageDigest.getInstance(algorithm);
            //使用指定的字节更新摘要
            md.update(input.getBytes("utf-8"));
            //获得密文
            byte temp[] = md.digest();
            //把密文转换成十六进制的字符串形式
            return HexUtils.encode(temp);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
    //******************************************************************************************
    //                                                                   获取文件的签名
    //******************************************************************************************
    public static String getFileMessageDigest(File file, String algorithm) {
        FileInputStream fis = null;
        try {
            MessageDigest md = MessageDigest.getInstance(algorithm);
            fis = new FileInputStream(file);
            byte[] buffer = new byte[102400];
            int length;
            while ((length = fis.read(buffer)) != -1) {
                md.update(buffer, 0, length);
            }
            return HexUtils.encode(md.digest());
        } catch (Exception e) {
            return null;
        } finally {
            try {
                if (fis != null) fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}


输出

字符串1的MD5签名为【C4CA4238A0B923820DCC509A6F75849B】
字符串1的SHA1签名为【356A192B7913B04C54574D18C28D46E6395428AB】

下面是两个不同的文件,但是它们的 MD5 都是一样的,这就是科学家通过碰撞破解签名的案例
文件1的MD5签名为【18FCC4334F44FED60718E7DACD82DDDF】
文件2的MD5签名为【18FCC4334F44FED60718E7DACD82DDDF】
文件1的SHA1签名为【0033F995A30FD2CCBF60CC1E7D7DB9E649397668】
文件2的SHA1签名为【30ACE7E13A7F9DC9ABBAA431241309AC6741E735】

所有支持的签名算法

SUN
    【SHA1PRNG】【SHA1withDSA】【NONEwithDSA】【SHA224withDSA】【SHA256withDSA】【DSA】【MD2】【MD5】【SHA】【SHA-224】【SHA-256】【SHA-384】【SHA-512】【DSA】【DSA】【DSA】【X.509】【JKS】【CaseExactJKS】【DKS】【JavaPolicy】【JavaLoginConfig】【PKIX】【PKIX】【LDAP】【Collection】【com.sun.security.IndexedCollection】
SunRsaSign
    【RSA】【RSA】【MD2withRSA】【MD5withRSA】【SHA1withRSA】【SHA224withRSA】【SHA256withRSA】【SHA384withRSA】【SHA512withRSA】
SunEC
    【EC】【EC】【NONEwithECDSA】【SHA1withECDSA】【SHA224withECDSA】【SHA256withECDSA】【SHA384withECDSA】【SHA512withECDSA】【EC】【ECDH】
SunJSSE
    【RSA】【RSA】【MD2withRSA】【MD5withRSA】【SHA1withRSA】【MD5andSHA1withRSA】【SunX509】【NewSunX509】【SunX509】【PKIX】【TLSv1】【TLSv1.1】【TLSv1.2】【TLS】【Default】【PKCS12】
SunJCE
    【RSA】【DES】【DESede】【DESedeWrap】【PBEWithMD5AndDES】【PBEWithMD5AndTripleDES】【PBEWithSHA1AndDESede】【PBEWithSHA1AndRC2_40】【PBEWithSHA1AndRC2_128】【PBEWithSHA1AndRC4_40】【PBEWithSHA1AndRC4_128】【PBEWithHmacSHA1AndAES_128】【PBEWithHmacSHA224AndAES_128】【PBEWithHmacSHA256AndAES_128】【PBEWithHmacSHA384AndAES_128】【PBEWithHmacSHA512AndAES_128】【PBEWithHmacSHA1AndAES_256】【PBEWithHmacSHA224AndAES_256】【PBEWithHmacSHA256AndAES_256】【PBEWithHmacSHA384AndAES_256】【PBEWithHmacSHA512AndAES_256】【Blowfish】【AES】【AES_128/ECB/NoPadding】【AES_128/CBC/NoPadding】【AES_128/OFB/NoPadding】【AES_128/CFB/NoPadding】【AES_128/GCM/NoPadding】【AES_192/ECB/NoPadding】【AES_192/CBC/NoPadding】【AES_192/OFB/NoPadding】【AES_192/CFB/NoPadding】【AES_192/GCM/NoPadding】【AES_256/ECB/NoPadding】【AES_256/CBC/NoPadding】【AES_256/OFB/NoPadding】【AES_256/CFB/NoPadding】【AES_256/GCM/NoPadding】【AESWrap】【AESWrap_128】【AESWrap_192】【AESWrap_256】【RC2】【ARCFOUR】【DES】【DESede】【Blowfish】【AES】【RC2】【ARCFOUR】【HmacMD5】【HmacSHA1】【HmacSHA224】【HmacSHA256】【HmacSHA384】【HmacSHA512】【DiffieHellman】【DiffieHellman】【DiffieHellman】【DiffieHellman】【DES】【DESede】【PBE】【PBEWithMD5AndDES】【PBEWithMD5AndTripleDES】【PBEWithSHA1AndDESede】【PBEWithSHA1AndRC2_40】【PBEWithSHA1AndRC2_128】【PBEWithSHA1AndRC4_40】【PBEWithSHA1AndRC4_128】【PBES2】【PBEWithHmacSHA1AndAES_128】【PBEWithHmacSHA224AndAES_128】【PBEWithHmacSHA256AndAES_128】【PBEWithHmacSHA384AndAES_128】【PBEWithHmacSHA512AndAES_128】【PBEWithHmacSHA1AndAES_256】【PBEWithHmacSHA224AndAES_256】【PBEWithHmacSHA256AndAES_256】【PBEWithHmacSHA384AndAES_256】【PBEWithHmacSHA512AndAES_256】【Blowfish】【AES】【GCM】【RC2】【OAEP】【DiffieHellman】【DES】【DESede】【PBEWithMD5AndDES】【PBEWithMD5AndTripleDES】【PBEWithSHA1AndDESede】【PBEWithSHA1AndRC2_40】【PBEWithSHA1AndRC2_128】【PBEWithSHA1AndRC4_40】【PBEWithSHA1AndRC4_128】【PBEWithHmacSHA1AndAES_128】【PBEWithHmacSHA224AndAES_128】【PBEWithHmacSHA256AndAES_128】【PBEWithHmacSHA384AndAES_128】【PBEWithHmacSHA512AndAES_128】【PBEWithHmacSHA1AndAES_256】【PBEWithHmacSHA224AndAES_256】【PBEWithHmacSHA256AndAES_256】【PBEWithHmacSHA384AndAES_256】【PBEWithHmacSHA512AndAES_256】【PBKDF2WithHmacSHA1】【PBKDF2WithHmacSHA224】【PBKDF2WithHmacSHA256】【PBKDF2WithHmacSHA384】【PBKDF2WithHmacSHA512】【HmacMD5】【HmacSHA1】【HmacSHA224】【HmacSHA256】【HmacSHA384】【HmacSHA512】【HmacPBESHA1】【PBEWithHmacSHA1】【PBEWithHmacSHA224】【PBEWithHmacSHA256】【PBEWithHmacSHA384】【PBEWithHmacSHA512】【SslMacMD5】【SslMacSHA1】【JCEKS】【SunTlsPrf】【SunTls12Prf】【SunTlsMasterSecret】【SunTlsKeyMaterial】【SunTlsRsaPremasterSecret】
SunJGSS
    【1.2.840.113554.1.2.2】【1.3.6.1.5.5.2】
SunSASL
    【DIGEST-MD5】【NTLM】【GSSAPI】【EXTERNAL】【PLAIN】【CRAM-MD5】【CRAM-MD5】【GSSAPI】【DIGEST-MD5】【NTLM】
XMLDSig
    【http://www.w3.org/2006/12/xml-c14n11#WithComments】【http://www.w3.org/2000/09/xmldsig#base64】【http://www.w3.org/TR/1999/REC-xslt-19991116】【http://www.w3.org/2001/10/xml-exc-c14n#】【http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments】【http://www.w3.org/2000/09/xmldsig#enveloped-signature】【http://www.w3.org/2002/06/xmldsig-filter2】【DOM】【http://www.w3.org/TR/2001/REC-xml-c14n-20010315】【http://www.w3.org/2001/10/xml-exc-c14n#WithComments】【http://www.w3.org/2006/12/xml-c14n11】【http://www.w3.org/TR/1999/REC-xpath-19991116】【DOM】
SunPCSC
    【PC/SC】
SunMSCAPI
    【Windows-PRNG】【Windows-MY】【Windows-ROOT】【NONEwithRSA】【SHA1withRSA】【SHA256withRSA】【SHA384withRSA】【SHA512withRSA】【MD5withRSA】【MD2withRSA】【RSA】【RSA】【RSA/ECB/PKCS1Padding】

MD5 SHA-1 示例的更多相关文章

  1. Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC

    Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC 博客分类: Java/Security Javabase64macmd5sha     加密解密,曾经是我一 ...

  2. password学4——Java 加密解密之消息摘要算法(MD5 SHA MAC)

    Java 加密解密之消息摘要算法(MD5 SHA MAC) 消息摘要 消息摘要(Message Digest)又称为数字摘要(Digital Digest). 它是一个唯一相应一个消息或文本的固定长度 ...

  3. python的加密模块(md5,sha,crypt)学习

    python的加密模块(md5,sha,crypt)学习 命令行使用python MD5: yinguicai@Cpl-IBP-Product:~/data/work/svn/v1.4.0_dev/A ...

  4. 如何生成安全的密码 Hash:MD5, SHA, PBKDF2, BCrypt 示例

    密码 Hash 值的产生是将用户所提供的密码通过使用一定的算法计算后得到的加密字符序列.在 Java 中提供很多被证明能有效保证密码安全的 Hash 算法实现,我将在这篇文章中讨论其中的部分算法. 需 ...

  5. Java 消息摘要 散列 MD5 SHA

    package xxx.common.util; import java.math.BigInteger; import java.security.MessageDigest; import jav ...

  6. BASE64,MD5,SHA,HMAC加密與解密算法(java)

    package com.ice.webos.util.security; import java.io.UnsupportedEncodingException; import java.math.B ...

  7. BASE64与单向加密算法MD5&SHA&MAC

    言归正传,这里我们主要描述Java已经实现的一些加密解密算法,最后介绍数字证书.     如基本的单向加密算法: BASE64 严格地说,属于编码格式,而非加密算法 MD5(Message Diges ...

  8. MD5/SHA加密

    public class EncryptUtil { public static String getEncrypt(String value , String encrypt_type){ Stri ...

  9. APP安全--网络传输安全 AES/RSA/ECC/MD5/SHA

    移动端App安全如果按CS结构来划分的话,主要涉及客户端本身数据安全,Client到Server网络传输的安全,客户端本身安全又包括代码安全和数据存储安全.所以当我们谈论App安全问题的时候一般来说在 ...

  10. Python3学习之路~5.12 hashlib & hmac & md5 & sha模块

    hashlib模块用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 import md5 h ...

随机推荐

  1. nesC 语言参考手册

    1 简介 nesC 是对 C 的扩展 ,它基于体现 TinyOS 的结构化概念和执行模型而设计. TinyOS 是为传感器网络节点而设计的一个事件驱动的操作系统,传感器网络节点拥有非常有限的资源 ( ...

  2. hustoj 1017 - Exact cover dancing link

    1017 - Exact cover Time Limit: 15s Memory Limit: 128MB Special Judge Submissions: 5851 Solved: 3092 ...

  3. lc面试准备:Remove Duplicates from Sorted List II

    1 题目 Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct ...

  4. 【HDOJ】2780 Su-Su-Sudoku

    模拟+DFS. /* 2780 */ #include <cstdio> #include <cstring> #include <cstdlib> ][]; ][ ...

  5. .net framework client profile

    .NET Framework Client Profile The .NET Client Profile is a subset of the .NET Framework, which was p ...

  6. PuTTY 信息泄露漏洞

    漏洞名称: PuTTY 信息泄露漏洞 CNNVD编号: CNNVD-201308-380 发布时间: 2013-08-27 更新时间: 2013-08-27 危害等级: 低危   漏洞类型: 信息泄露 ...

  7. 用Delphi7开发Web Service程序 转

        转:http://rosehacker.blog.51cto.com/2528968/450160 用Delphi7开发Web Service程序,并把服务程序放在IIS Web服务器上提供给 ...

  8. HDU-4089 Activation

    http://acm.hdu.edu.cn/showproblem.php?pid=4089 Activation Time Limit: 20000/10000 MS (Java/Others)   ...

  9. python 正则表达式(一)

    正则表达式(regular exprssion)是一种形式化语法描述的文本匹配模式.模式被解释为一组指令,然后会执行这组指令.以一个字符串作为输入,生成一个匹配的子集或源字符串的修改版本. 表达式可以 ...

  10. Bzoj 3809: Gty的二逼妹子序列 莫队,分块

    3809: Gty的二逼妹子序列 Time Limit: 35 Sec  Memory Limit: 28 MBSubmit: 868  Solved: 234[Submit][Status][Dis ...