Android数据加密之SHA安全散列算法

前言:

对于SHA安全散列算法,以前没怎么使用过,仅仅是停留在听说过的阶段,今天在看图片缓存框架Glide源码时发现其缓存的Key采用的不是MD5加密算法,而是SHA-256加密算法,这才勾起了我的好奇心,所以趁着晚上没啥事,来学习一下。

其他几种加密方式:

•Android数据加密之Rsa加密
 •Android数据加密之Aes加密
 •Android数据加密之Des加密
 •Android数据加密之MD5加密
 •Android数据加密之Base64编码算法

SHA加密算法

SHA(Secure Hash Algorithm,安全散列算法),数字签名等密码学应用中重要的工具,被广泛地应用于电子商务等信息安全领域。和MD5加密算法一样,也是一种不可逆的加密算法,不过也可以通过穷举法破解,但是SHA的破译难度与成本要高于MD5,相对于MD5更加安全,现在已成为公认的最安全的散列算法之一,并被广泛使用。主要包括SHA-1,SHA-224,SHA-256,SHA-384,和SHA-512这几种单向散列算法。SHA-1,SHA-224和SHA-256适用于长度不超过2^64二进制位的消息。SHA-384和SHA-512适用于长度不超过2^128二进制位的消息。官方解说如下:

•由消息摘要反推原输入消息,从计算理论上来说是很困难的。
 •想要找到两组不同的消息对应到相同的消息摘要,从计算理论上来说也是很困难的。任何对输入消息的变动,都有很高的机率导致其产生的消息摘要迥异。

SHA加密原理

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

单向散列函数的安全性在于其产生散列值的操作过程具有较强的单向性。如果在输入序列中嵌入密码,那么任何人在不知道密码的情况下都不能产生正确的散列值,从而保证了其安全性。SHA将输入流按照每块512位(64个字节)进行分块,并产生20个字节的被称为信息认证代码或信息摘要的输出。

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

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

MAC (信息认证代码)就是一个散列结果,其中部分输入信息是密码,只有知道这个密码的参与者才能再次计算和验证MAC码的合法性。

SHA加密优点

由于SHA也是有MD4演变过来的,所以其优点与MD5大致一样
•压缩性:任意长度的数据,算出的SHA值长度都是固定的。
•容易计算:从原数据计算出SHA值很容易。 
•抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的SHA值都有很大区别。
•强抗碰撞:已知原数据和其SHA值,想找到一个具有相同SHA值的数据(即伪造数据)是非常困难的。

SHA应用场景

•一致性验证
•数字签名
•安全访问认证

SHA加密的简单实现

这里代码演示以SHA-256为例。

public static String sha(String string) { if (TextUtils.isEmpty(string)) { return ""; } MessageDigest md5 = null; try { md5 = MessageDigest.getInstance("sha-256"); byte[] bytes = md5.digest((string ).getBytes()); String result = ""; for (byte b : bytes) { String temp = Integer.toHexString(b & 0xff); if (temp.length() == 1) { temp = "0" + temp; } result += temp; } return result; } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return ""; }

SHA安全性探讨

•SHA-1在许多安全协议中广为使用,包括TLS和SSL、PGP、SSH、S/MIME和IPsec,曾被视为是MD5(更早之前被广为使用的散列函数)的后继者。2005年,密码学家就证明SHA-1的破解速度比预期提高了2000倍,虽然破解仍然是极其困难和昂贵的,但随着计算机变得越来越快和越来越廉价,SHA-1算法的安全性也逐年降低,已被密码学家严重质疑,希望由安全强度更高的SHA-2替代它。

•SHA-224、SHA-256、SHA-384,和SHA-512并称为SHA-2。

•新的散列函数并没有接受像SHA-1一样的公众密码社区做详细的检验,所以它们的密码安全性还不被大家广泛的信任。

•虽然至今尚未出现对SHA-2有效的攻击,它的算法跟SHA-1基本上仍然相似;因此有些人开始发展其他替代的散列算法。

跨国公司事迹:
   Google官方博客宣布,将在Chrome浏览器中逐渐降低SHA-1证书的安全指示。但有意思的是Google.com目前使用的也是SHA-1签名的证书,但证书将在3个月内过期,Google将从2015年起使用SHA-2签名的证书。SHA-1算法目前尚未发现严重的弱点,但伪造证书所需费用正越来越低。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

时间: 2024-09-22 08:45:50

Android数据加密之SHA安全散列算法的相关文章

Android数据加密之SHA安全散列算法_Android

前言: 对于SHA安全散列算法,以前没怎么使用过,仅仅是停留在听说过的阶段,今天在看图片缓存框架Glide源码时发现其缓存的Key采用的不是MD5加密算法,而是SHA-256加密算法,这才勾起了我的好奇心,所以趁着晚上没啥事,来学习一下. 其他几种加密方式:  •Android数据加密之Rsa加密  •Android数据加密之Aes加密  •Android数据加密之Des加密  •Android数据加密之MD5加密  •Android数据加密之Base64编码算法 SHA加密算法      SH

求C# SHA-256的HMAC散列算法

问题描述 求C#SHA-256的HMAC散列算法,贴代码!!!! 解决方案 解决方案二:byte[]key=...;byte[]content=...;using(HMAChmac=newHMACSHA256(key)){byte[]hash=hmac.ComputeHash(content);}

《解读NoSQL》——2.4 使用一致性散列算法维护当前的缓存

2.4 使用一致性散列算法维护当前的缓存 我们已经知道了将经常使用的数据保存在RAM缓存中的重要性,以及如何通过减少非必要的磁盘访问来提升数据库性能.NoSQL系统将基于这个概念进行深入探讨,并采用了一致性散列(consistent hashing)的算法使访问最频繁的数据保存在缓存中. 在评估NoSQL系统如何工作时,一致性散列算法是一种有效的通用流程.一致性散列算法能很快判断出一个新的查询或者文档是否和缓存中的某一个对象是相同的.了解这些将有助于减少不必要的磁盘访问并且使数据库保持高速运行的

Google发布CityHash系列散列算法

Google发布了 CityHash系列字符串散列算法.今天发布的有两种算法:CityHash64 与 CityHash128.它们分别根据字串计算64和128位的散列值.这些算法不适用于加密,但适合用在散列表等处. Google一直在根据其数据中心常用的CPU对算法进行优化,结果发现对大多数个人计算机与笔记本同样有效益.尤其是在64位寄存器.指令集级的并行,以及快速非对其内存存取方面. 该算法的开发受到了前人在散列算法方面的巨大启发,尤其是Austin Appleby的MurmurHash.但

Android数据加密之Des加密_Android

前言:  有个同事咨询我有关Android DES加密的相关实现,简单的实现了一下,今天来总结一下.  其他几种加密方式:  •Android数据加密之Rsa加密  •Android数据加密之Aes加密  •Android数据加密之Des加密  •Android数据加密之MD5加密  •Android数据加密之Base64编码算法  •Android数据加密之SHA安全散列算法  DES加密介绍:       DES是一种对称加密算法,所谓对称加密算法即:加密和解密使用相同密钥的算法.DES加密

Android数据加密之Aes加密_Android

前言: 项目中除了登陆,支付等接口采用rsa非对称加密,之外的采用aes对称加密,今天我们来认识一下aes加密.  其他几种加密方式:  •Android数据加密之Rsa加密  •Android数据加密之Aes加密  •Android数据加密之Des加密  •Android数据加密之MD5加密  •Android数据加密之Base64编码算法  •Android数据加密之SHA安全散列算法  什么是aes加密?       高级加密标准(英语:Advanced Encryption Standa

Android数据加密之Des加密

前言: 有个同事咨询我有关Android DES加密的相关实现,简单的实现了一下,今天来总结一下. 其他几种加密方式:  •Android数据加密之Rsa加密  •Android数据加密之Aes加密  •Android数据加密之Des加密  •Android数据加密之MD5加密  •Android数据加密之Base64编码算法  •Android数据加密之SHA安全散列算法 DES加密介绍:       DES是一种对称加密算法,所谓对称加密算法即:加密和解密使用相同密钥的算法.DES加密算法出

Android数据加密之Aes加密

前言: 项目中除了登陆,支付等接口采用rsa非对称加密,之外的采用aes对称加密,今天我们来认识一下aes加密. 其他几种加密方式:  •Android数据加密之Rsa加密  •Android数据加密之Aes加密  •Android数据加密之Des加密  •Android数据加密之MD5加密  •Android数据加密之Base64编码算法  •Android数据加密之SHA安全散列算法 什么是aes加密? 高级加密标准(英语:Advanced Encryption Standard,缩写:AE

Android数据加密之Rsa加密

前言: 最近无意中和同事交流数据安全传输的问题,想起自己曾经使用过的Rsa非对称加密算法,闲下来总结一下. 其他几种加密方式: •Android数据加密之Rsa加密  •Android数据加密之Aes加密  •Android数据加密之Des加密  •Android数据加密之MD5加密  •Android数据加密之Base64编码算法  •Android数据加密之SHA安全散列算法 什么是Rsa加密? RSA算法是最流行的公钥密码算法,使用长度可以变化的密钥.RSA是第一个既能用于数据加密也能用于