安全加密算法与数据签名总结(1)

常用的安全算法主要包括摘要算法、对称加密算法、非对称加密算法、信息编码等。

数字摘要
     数字摘要也称为消息摘要,它是一个唯一对应一个消息或文本的固定长度的值,它由一个单向Hash函数对消息进行计算而产生。如果消息在传递的途中改变了,接收者通过对收到的消息采用相同的Hash重新计算,新产生的摘要与原摘要进行比较,就可知道消息是否被篡改了,因此消息摘要能够验证消息的完整性。消息摘要采用单向Hash函数,将需要计算的内容“摘要”成固定长度的串,这个串也成为 数字指纹。这个串有固定的长度,且不同的明文摘要成密文,其结果总是不同的(相对的,这个后面会介绍),而相同的明文其摘要必定一致。这样这串摘要便可成为验证明文是否是“真身”的“指纹”了。

待摘要串----->Hash函数----->摘要

     如果待摘要的关键字为k,Hash函数为f(x),则关键字k的摘要为f(x),若关键字k1不等于k2,而 f(k1)=f(k2),这种现象称为 Hash碰撞。一个Hash函数的好坏是由发生碰撞的概率决定的,如果攻击者能够轻易地构造出两个具有相同Hash值的消息,那么这样的Hash函数是很危险的。也可以认为摘要的长度越长算法也就越安全。由于数字摘要并不包含原文的完整信息,因此,要从摘要信息逆向得出待摘要的明文串,原则上几乎是不可能完成的任务。
     有关消息摘要的特点总结如下:
     (1)无论输入的消息有多长,计算出来的消息摘要的长度总是固定的。例如, 应用MD5算法计算的摘要消息有128个比特位,而使用SHA-1算法计算出来的摘要消息有160个比特位。
     (2)一般只要输入的消息不同,对其进行摘要以后产生的摘要消息也不相同,但相同的输入必会产生相同的输出。这是一个好的消息摘要算法所需要具备的性质:输入改变了,输出也就改变了,两条相似的消息的摘要却大相径庭。好的摘要算法很难从中找到“碰撞”,虽然“碰撞“肯定是存在的。
     (3)由于消息摘要并不包含原文的完整信息,因此只能进行正向的信息摘要,而无法从摘要中恢复出原来的消息,甚至根本就找不到任何与原信息相关的信息。当然。可以采用暴力攻击的方法,尝试每一个可能的信息,计算其摘要,看看是否与已有的摘要相同。如果采用这种方式,最终肯定能恢复出摘要的消息,但是这种穷举的方式以目前的计算水平来看,需要消耗相当长的时间,因此被认为是不可能实现的。

1、MD5
MD5即Message Digest Algorithm5(信息摘要发5),是数字摘要算法的一种实现,用于确保信息传输完整性和一致性,摘要长度为128位。MD5是由MD4、3、2改进而来,主要增强了算法复杂度和不可逆。该算法因其普遍、稳定、快速的特点,被业界广泛使用。
Java的MD5算法的基本使用
public static byte[] encryptionMD5(String content){
   try {
      // Create MD5 Hash
      MessageDigest md = MessageDigest.getInstance("MD5");
     byte[] bytes = md.digest(content.getBytes("utf-8"));
      returnbytes ;
   } catch (Exception e) {
      e.printStackTrace();
  }
   return "";
}
通过 MessageDigest取得MD5摘要算法的实例,然后通过digest方法进行MD5的摘要。 
MD5算法生成的摘要串进行十六进制编码处理 

private static final char  HEX_DIGITS [] = {  '0' '1' '2'
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值