信息摘要技术 - SHA系列

37 篇文章 0 订阅
13 篇文章 0 订阅

SHA算法分为两个分支:SHA-1和SHA-2,其中SHA-2包括SHA-224、SHA-256、SHA-384和SHA-512,SHA算法和MD算法类似,也是产生一个固定的散列码。

SHA算法家族发展历史

SHA算法被广泛的认为是MD5算法的继任者,由美国国家安全局(NSA)设计,经过美国标准与技术研究院(NIST)发布,发布历史比MD算法晚,相对安全:

  • 1993年,NIST发布SHA-0算法:FIPS PUB 180,SHA-0发布不就即被NSA撤回,原因是不够安全;
  • 1995年,NIST发布SHA-1算法:FIPS PUB 180-1,SHA-1算法被广泛用在TLS/SSL(HTTPS)、PGP、SSH、S/MIME、IPsec。
    • SHA-1可对最大长度在264字节的信息做摘要,产生160位信息,转换为16进制为40位;
    • SHA-1定义在RFC 3174中;
  • 2002年,NIST发布SHA-2算法:FIPS PUB 180-2,包含SHA-256、SHA-384、SHA-512算法;
  • 2004年,NIST发布SHA-2算法中的SHA-224,这是一个变种,主要是为了配合产生符合3DES所需要的秘钥长度而定义的算法;

应用场景

SHA算法的应用场景和MD算法应用场景类似,主要目的验证信息完整性,防篡改,下表是不同的SHA算法产生的秘钥的长度:

算法产生的摘要长度备注
SHA-1160JDK 6实现
SHA-256256JDK 6实现
SHA-384384JDK 6实现
SHA-512512JDK 6实现
SHA-224224Bouncy Castle实现,JDK不支持

Java中算法实现

SHA的算法调用和MD算法一样,也是通过MessageDigest类完成,getInstance的时候传入算法名称即可,也可以使用DigestInputStream,代码如下:

public class MD5Test {
public class MDInputStreamTest {

    public static void main(String[] args) throws NoSuchAlgorithmException, IOException {

        // 待做消息摘要操作的原始信息
        byte[] input = "sha-256".getBytes();
        // 初始化MesssageDigest对象,将使用MD5算法
        MessageDigest md = MessageDigest.getInstance("SHA-256");
        // 构建DigestInputStream对象
        DigestInputStream in = new DigestInputStream(new ByteArrayInputStream(input), md);
        try {// 每次读取一段信息,计算MD5值,这里可以分次读取然后记录每次的MD5
            in.read(input, 0, input.length);
            // 获取摘要信息
            byte[] rs = in.getMessageDigest().digest();
            log(new String(HexBin.encode(rs)));
        } finally {
            in.close();
        }

    }

    private static void log(String msg) {
        System.out.println(msg);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值