SHA 算法的使用
来源:互联网 发布:怎么开好淘宝店 编辑:程序博客网 时间:2024/06/05 06:54
SHA 算法简介
之前已经介绍过 MD5 算法的使用,从生成的 MD5 值我们可以看出,MD5 加密过后的长度是 32 位 16进制,也就是 128 位二进制,而 SHA 算法相比与 MD5 是更安全了,因为 SHA 最短的摘要长度也有 160 位二进制。SHA 算法也分好几种,如下所示
算法 摘要长度SHA-1 160SHA-256 256SHA-384 384SHA-512 512
按照正常的理解,生成摘要的长度越长就越安全,为什么呢?因为一旦摘要长度变长了,那么生成摘要的碰撞几率也就下降了,通俗的说,就是生成两个一模一样的摘要的概率降低了.
SHA 算法的使用
SHA 算法包含在 JDK 中,使用起来和 MD5 的使用方法一样,非常的简单,由于SHA 算法一般用于数字签名,下面我们以此为例介绍一下 SHA 的使用。
测量 JDK 的 SHA 值
将 jdk拖进项目
代码如下
public class TestSha { public static final String PATH = "jdk-8u101-windows-x64.exe"; public static void main(String[] args) throws Exception { String sha = getSHAOfFile(PATH); System.out.println(sha); } public static String getSHAOfFile(String path) throws Exception { FileInputStream stream = new FileInputStream(new File(path)); DigestInputStream digestInputStream = new DigestInputStream(stream, MessageDigest.getInstance("SHA-1")); byte[] buffer = new byte[1024]; int read = digestInputStream.read(buffer, 0, 1024); while (read != -1) { read = digestInputStream.read(buffer, 0, 1024); } MessageDigest digest = digestInputStream.getMessageDigest(); byte[] resultBytes = digest.digest(); String resultString = byteToHexString(resultBytes); return resultString; } public static String byteToHexString(byte[] bs) { StringBuilder builder = new StringBuilder(""); if (bs == null || bs.length <= 0) { return null; } for (int i = 0; i < bs.length; i++) { int v = bs[i] & 0xFF; String hv = Integer.toHexString(v); if (hv.length() < 2) { builder.append(0); } builder.append(hv); } return builder.toString(); }}
运行一下,输出结果为
8213503ea518db7c949b997c9b120f58d0bd2c10
0 0
- SHA 算法的使用
- SHA-1算法使用
- SHA-256,SHA-512 和 AES128 算法的调用
- SHA算法
- SHA算法
- “摘要”算法,使用示例。(java, sha) [备忘]
- 使用MD5和SHA算法加密信息
- 关于java散列算法(MD5 SHA-1 SHA-128 SHA-256..)的一点总结
- SHA算法JAVA的實現
- SHA-1算法的Java实现
- Google计划逐步淘汰使用SHA-1签名算法的证书
- md5加密和sha加密的使用
- 消息摘要 MD5 和 SHA 的使用
- JAVA的MD5和SHA-256和SHA-512 的 Hash 算法的调用
- JAVA 的 SHA-256 和 SHA-512 两种 Hash 算法的调用
- JAVA 的 SHA-256 和 SHA-512 两种 Hash 算法的调用
- 如何使用MD5和SHA算法加密信息
- MD5与SHA算法
- python+Eclipse+pydev环境搭建
- 【数据结构】栈的实现
- 轻量级分布式 RPC 框架
- mysql性能优化经验
- 客户端TortoiseSVN的使用方法
- SHA 算法的使用
- java.lang.UnsupportedOperationException: Can't convert to integer: type=0x3
- Win10运行Ubuntu图形界面程序
- Centos7下Hadoop搭建
- 1059. Prime Factors (25) PAT 甲级
- HDU 5794 A Simple Chess (容斥+lucas定理)
- SpringMVC验证框架Validation特殊用法
- CodeForces Gym100935 水题专场
- HDUHdu 2602 Bone Collector 01背包