SHA-1加密算法

Java版SHA-1加密算法

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

原理

SHA-1是一种数据加密算法,该算法的思维是接纳一段明文,然后以一种不可逆的方式将它转换成一段(一般更小)密文, 也能够简略的理解为取一串输入码(称为预映射或信息),并把它们转化为长度较短、位数固定的输出序列即散列值(也称为信息摘要或信息认证代码)的过程
在这里插入图片描述

 public String sha1Encode(String data) throws Exception {
        MessageDigest messageDigest = MessageDigest.getInstance("SHA-1");
        if (data!= null){
            data +="salt";//加点盐
            //使用指定的字节来更新我们的摘要
            messageDigest.update(data.getBytes("utf-8"));
            //获取密文 (完成摘要计算)
            byte[] bytes = messageDigest.digest();
            //获取计算的长度
            int length = bytes.length;
            System.out.println(length);
            //16进制字符串
            String str = "0123456789abcdef";
            //把字符串转为字符串数组
            char[] ch = str.toCharArray();

            //创建一个40位长度的字节数组
            char[] chs = new char[length*2];
            for(int i=0,k=0;i<length;i++) {
                byte b3 = bytes[i];//获取摘要计算后的字节数组中的每个字节
                // >>>:无符号右移
                // &:按位与
                //0xf:0-15的数字
                chs[k++] = ch[b3 >>> 4 & 0xf];
                chs[k++] = ch[b3 & 0xf];
            }

            return new String(chs);
        }else {
            return null;
        }

    }

但是在实际的应用中,我们可以直接引org.apache.commons.codec.digest.DigestUtils,然后按照如下方法调用加密即可

public static String sha1Encode(String data) {
    if(StringUtils.isEmpty(data)){
        return null;
    }else{
        return DigestUtils.sha1Hex(data);
    }
} 

SHA-1算法输入报文的长度不限,产生的输出是一个160位的报文摘要。输入是按512 位的分组进行处理的。SHA-1是不可逆的、防冲突,并具有良好的雪崩效应


雪崩效应:在密码学中,雪崩效应(Avalanche effect)指加密算法(尤其是块密码和加密散列函数)的一种理想属性。雪崩效应是指当输入发生最微小的改变(例如,反转一个二进制位)时,也会导致输出的剧变(如,输出中一半的二进制位发生反转)。在高品质的块密码中,无论密钥或明文的任何细微变化都应当引起密文的剧烈改变。

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

罗罗的1024

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

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

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

打赏作者

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

抵扣说明:

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

余额充值