当前位置: 首页 > ai >正文

SHA1 简单介绍以及使用

原文出处:blog.sina.com.cn/s/blog_a42c4c6c0102woq9.html

安全哈希算法(Secure Hash Algorithm)

     SHA-1是一种数据加密算法,该算法的思想是接收一段明文,然后以一种不可逆的方式将它转换成一段(通常更小)密文,也可以简单的理解为取一串输入码(称为预映射或信息),并把它们转化为长度较短、位数固定的输出序列即散列值(也称为信息摘要或信息认证代码)的过程。 

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

       数字签名的原理是将要传送的明文通过一种函数运算(Hash)转换成报文摘要(不同的明文对应不同的报文摘要),报文摘要加密后与明文一起传送给接受方,接受方将接受的明文产生新的报文摘要与发送方的发来报文摘要解密比较,比较结果一致表示明文未被改动,如果不一致表示明文已被篡改

简单文字描述:

客户端:

在APP 与 后端服务器接口调用的时候,将需要传输的参数进行关键参数(如:String A,String B)进行SHA1加密,获取加密之后的摘要(C);然后在接口调用的时候将参数原文(A,B) 和 加密的摘要(C) 一起传输给后台服务器;

服务器:

后台接口接受相关参数,然后将(A,B) 在后台进行SHA1加密,获取加密摘要D,最后将D与C进行比较,如果C == D ,则 A和B 在传输过程中参数没有被窃取改变;如果 C != D,则说明A和B已经在传输过程中发生了改变,最好不要使用!

注:需要在前后端共同定义一个加密额外秘钥,在进行SHA1加密的过程中添加进去,这样即使在客户端拦截到我们需要传输的参数,进行SHA1 加密,但是由于其不知道 秘钥,所以进行SHA1加密出来的摘要肯定和后端用相关参数、秘钥计算出来的结果不同

关键SHA1加密代码简单举例:

 public static String createSignature(String... arr) {

        try {

            Arrays.sort(arr);

            StringBuilder content = new StringBuilder();

            for (int i = 0; i < arr.length; i++) {

                content.append(arr[i]);

            }

            MessageDigest md = MessageDigest.getInstance("SHA-1");

            byte[] digest = md.digest(content.toString().getBytes());

            return byteToStr(digest);

        } catch (Exception e) {

        }

        return null;

    }

 。。。。。 

http://www.xdnf.cn/news/11556.html

相关文章:

  • 十分钟理解回归测试(Regression Testing)
  • HttpClient连接池原理
  • LVS负载均衡(LVS简介、三种工作模式、十种调度算法)
  • 哈利波特系列之伏地魔生平
  • 网络通信从入门到精通(万字吐血整理,持续更新!)
  • 数据结构和算法——二叉树
  • JPA与JDBC的区别,JPA详用的注解
  • 关于LDO,读懂这一篇就够了
  • 卡方检验(Chi-square test/Chi-Square Goodness-of-Fit Test)
  • 端口扫描(X-scan)
  • UART介绍
  • Spring AOP用法详解
  • 【ICO/WMF】PNG/JPEG转ICO/WMF工具
  • XSS从菜鸟到高手,你可能需要这些干货技巧
  • 如何获取当前时间?
  • 加密算法基础(1) -- 非对称加密算法之RSA
  • STP详解
  • 全网最详细的华为OD知识,值不值得去看这篇就够了!
  • 公网IP是什么(Public IP)
  • mac上Homebrew的安装与使用
  • Elasticsearch 集群管理与运维
  • 子网掩码详解
  • 【C语言】 知识点汇总--基础知识点梳理(超全超详细)
  • Matplotlib详解
  • FRP实现内网穿透(笔记)
  • ftp和sftp区别,以及xftp的使用
  • Apache简介
  • WPF 使用矢量字体图标
  • 文本编辑器Sublime Text 在Windows系统上的下载与安装配置
  • Windows 搭建Flutter开发环境教程