常见的Hash摘要算法以及Java实现

MD5

MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特设计,于1992年公开,用以取代MD4算法。1996年后该算法被证实存在弱点,可以被加以破解,对于需要高度安全性的数据,一般建议改用其他算法,如SHA-2。

public static void main(String[] args) throws Exception {
    MessageDigest md5 = MessageDigest.getInstance("MD5");
    byte[] digest = md5.digest("123".getBytes());
    System.out.println(Arrays.toString(digest));
}

可以用下面的程序调用

public static void main(String[] args) {
    //要加密的字符串
    String str = "123456qwer";
    try {
        HashTest.HashMD5(str);
    }catch (Exception e){
        e.printStackTrace();
    }
}

得到结果为

[1, 94, 32, -67, -48, -109, 3, 78, -105, 54, 62, -15, 67, -102, 114, -36]

SHA

SHA-1(Secure Hash Algorithm 1,安全散列算法1)是一种密码散列函数,美国国家安全局设计,并由美国国家标准技术研究所(NIST)发布为联邦数据处理标准(FIPS)。SHA-1可以生成一个被称为消息摘要的160位(20字节)散列值,散列值通常的呈现形式为40个十六进制数。

正式名称为 SHA 的家族第一个成员发布于 1993年。然而人们给它取了一个非正式的名称 SHA-0 以避免与它的后继者混淆。两年之后, SHA-1,第一个 SHA 的后继者发布了。 另外还有四种变体,曾经发布以提升输出的范围和变更一些细微设计: SHA-224, SHA-256, SHA-384 和 SHA-512 (这些有时候也被称做 SHA-2):

public static void HashMD5(String args) throws NoSuchAlgorithmException {
    MessageDigest md5 = MessageDigest.getInstance("SHA1");
    byte[] digest = md5.digest(args.getBytes());
    System.out.println(Arrays.toString(digest));
}

得到结果

[102, 23, 29, 10, -58, 51, -18, -80, -73, 41, 16, 88, 86, -4, 68, 38, 119, 101, -6, -117]

SHA256算法使用的哈希值长度是256位

public static void HashMD5(String args) throws NoSuchAlgorithmException {
    MessageDigest md5 = MessageDigest.getInstance("SHA-256");
    byte[] digest = md5.digest(args.getBytes());
    System.out.println(Arrays.toString(digest));
}

得到结果

[-17, -91, 116, 116, -46, 88, -27, 119, -4, 47, -97, -127, 55, 102, 10, -58, 10, 125, -88, 55, 41, -101, -90, -114, 54, -118, 15, -96, 27, 9, 87, -103]

SHA512算法使用的哈希值长度是512位

public static void HashMD5(String args) throws NoSuchAlgorithmException {
    MessageDigest md5 = MessageDigest.getInstance("SHA-512");
    byte[] digest = md5.digest(args.getBytes());
    System.out.println(Arrays.toString(digest));
}

得到结果

[-55, 28, -63, -56, -71, -120, -65, 96, -77, -38, 61, -72, -69, -101, -108, -113, -64, 94, -65, -109, 56, -84, -105, 106, -127, 25, 45, 43, 12, 90, -104, -95, -4, -103, -88, 29, -52, 24, -28, -45, 13, -124, 40, 121, 93, 3, 8, 36, 102, 65, 97, 65, -19, 119, -97, 13, -45, -92, -13, -57, 90, 43, 10, -109]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LyaJpunov

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值