测试代码

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. bzoj 2741: 【FOTILE模拟赛】L 分塊+可持久化trie

    2741: [FOTILE模拟赛]L Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 1116  Solved: 292[Submit][Status] ...

  2. [BZOJ 1115] [POI2009] 石子游戏Kam 【阶梯博弈】

    题目链接:BZOJ - 1115 题目分析 首先看一下阶梯博弈: 阶梯博弈是指:初始有 n 堆石子,每次可以从任意的第 i 堆拿若干石子放到第 i - 1 堆.最终不能操作的人失败. 解法:将奇数位的 ...

  3. 【MyBatis学习笔记】

    [MyBatis学习笔记]系列之预备篇一:ant的下载与安装 [MyBatis学习笔记]系列之预备篇二:ant入门示例 [MyBatis学习笔记]系列之一:MyBatis入门示例 [MyBatis学习 ...

  4. 【UVALive - 5131】Chips Challenge(上下界循环费用流)

    Description A prominent microprocessor company has enlisted your help to lay out some interchangeabl ...

  5. Principles of Motion Sensing

    Principlesof Motion Sensing Various sensors capable of detecting motionin free space have been comme ...

  6. lc面试准备:Reverse Linked List II

    1 题目 Reverse a linked list from position m to n. Do it in-place and in one-pass. For example:Given 1 ...

  7. Android 之使用LocalBroadcastManager解决BroadcastReceiver安全问题

    在Android系统中,BroadcastReceiver的设计初衷就是从全局考虑的,可以方便应用程序和系统.应用程序之间.应用程序内的通信,所以对单个应用程序而言BroadcastReceiver是 ...

  8. BZOJ1609: [Usaco2008 Feb]Eating Together麻烦的聚餐

    1609: [Usaco2008 Feb]Eating Together麻烦的聚餐 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 938  Solved ...

  9. 【转】Android:Bluetooth 的打开和关闭--不错

    原文网址:http://www.ifeegoo.com/android-turn-on-and-turn-off-bluetooth.html 摘要:Android 中打开和关闭 Bluetooth ...

  10. iOS 多线程学习笔记 —— NSThread

    本文复制.参考自文章:iOS多线程编程之NSThread的使用  ,主要为了加强个人对知识的理解和记忆,不做他用.原作者声明: 著作权声明:本文由http://blog.csdn.net/totogo ...