测试代码

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. jsonp跨域问题记录

    这段时间用H5做移动app开发,遇到不少之前做web的时候不曾遇到的问题,记录一下,共勉-- 首先说一个:js跨域取数的问题 描述:  之前做web都是通过后台获取数据,没考虑过跨域的问题.这次用h5 ...

  2. Uva_11916 Emoogle Grid

    题目链接 题意: 有个N X M的棋盘, 有K种颜色, 有B个不可涂色的位置, 共有R种涂色方案. 1)每个可涂色的位置必须涂上一种颜色 2)不可涂色位置不能涂色 3)每个位置必须从K种颜色中选出一种 ...

  3. [BZOJ 1053] [HAOI 2007] 反素数ant

    题目链接:BZOJ 1053 想一想就会发现,题目让求的 1 到 n 中最大的反素数,其实就是 1 到 n 中因数个数最多的数.(当有多于一个的数的因数个数都为最大值时,取最小的一个) 考虑:对于一个 ...

  4. oc调用c++接口时 报错 Undefined symbols for architecture i386:

    当在oc中调用c++中的方法时,发现说c++中的方法没定义或是找不到 Undefined symbols for architecture i386: "_desTYData", ...

  5. 代理Delegate的小应用(代理日期控件和下拉框)

    前言 在平时关于表格一类的的控件使用中,不可避免需要修改每个Item的值,通过在Item中嵌入不同的控件对编辑的内容进行限定,然而在表格的Item中插入的控件始终显示,当表格中item项很多的时候,会 ...

  6. 教程:在 VM Depot 中查找 Azure 可用的虚拟机镜像

     发布于 2014-07-08 作者 陈 忠岳 对于 Azure 的社区管理虚拟机资源库--VM Depot--的用户来说,网站的搜索功能已得到极大的改善.这一搜索能力的增强,可以帮助用户更容易地 ...

  7. 【转】在Ubuntu下编译Android源码并运行Emulator

    原文网址:http://www.mcuos.com/thread-4553-1-1.html 建立编译环境 1.在VirtualBox上安装Ubuntu 2.安装JDK   $ sudo apt-ge ...

  8. 【转】OpenGL基础图形编程(一)

    原文:http://blog.chinaunix.net/uid-20638550-id-1909183.html  分类: 一.OpenGL与3D图形世界 1.1.OpenGL使人们进入三维图形世界 ...

  9. js遍历数组和遍历对象的区别

    <script> //----------------for用来遍历数组对象-- var i,myArr = [1,2,3]; for (var i = 0; i < myArr.l ...

  10. YUV像素和ycbcr

    一幅彩色图像的基本要素是什么? 说白了,一幅图像包括的基本东西就是二进制数据,其容量大小实质即为二进制数据的多少.一幅1920x1080像素的YUV422的图像,大小是1920X1080X2=4147 ...