关于加密解密签名等基础知识

一、各种概念、技术和用途

主要概念:加密解密算法、消息摘要、数字签名、数字证书

1、加密解密算法

  • 对称加密算法:DES、TripleDES/3DES、AES|RC4、RC5|
  • 非对称加密算法:DSA、RSA、ECC

2、消息摘要

  • 消息摘要算法包含MD、SHA和MAC共3大系列,常用于验证数据的完整性,是数字签名算法的核心算法;
  • MAC算法是综合了MD和SHA算法;主要包括HmacMD5、HmacSHA1、HmacSHA256、HmacSHA384、HmacSHA512
  • MAC算法结合了MD5和SHA算法的优势,并加入密钥的支持,是一种更为安全的消息摘要算法。
  • 消息摘要算法,只能防止数据被纂改,但是无法防抵赖;

3、数字签名

  • 数字签名算法是非对称加密算法和消息摘要算法的结合体。
  • 数字签名算法在实际运用时,通常是先使用消息摘要算法对原始消息做摘要处理,然后再使用私钥对摘要值做签名处理;
  • 签名算法受私钥控制,且有签名者保密;
  • 验证算法受公钥控制,且对外公开。
  • 签名者任何时候都无法否认自己曾经签发的数字签名;
  • 信息接收者能够验证和确认收到的数字签名,任何人无法伪造信息发送者的数字签名;
  • 数字签名算法,如:SHA1WithRSA、SHA256WithRSA

4、数字证书

  • 密钥很可能会以二进制方式存储于文件中,由程序来读取。
  • X509EncodedKeySpec用于构建公钥规范;PKCS8EncodedKeySpec用于构建私钥规范;需要通过这两个类将密钥文件中的字节数组读出转换为密钥对象;
  • 把密钥库看做私钥相关操作的入口,数字证书则是公钥相关操作的入口;
  • 通常用Base64来对密钥文件进行编码,方便阅读
  • 数字证书,主要是用来证明公钥就是某个机构的;以HTTPS为例,目前很多网站会给我们公钥,我们加密我们的数据之后,将数据发给他们。如果我们拿到的公钥是非法机构的话,那么非法机构就可以获取我们的信息;因此,给我们公钥相当于给了我们一把锁,但是我们不知道持有钥匙的是好人还是坏人;但是如果这把锁是CA给的,那我们就信任持有开锁钥匙的一定是个好人,如果我们被骗了,那就找CA的麻烦;

5、Base64

在计算机的世界里,密钥就是一段二进制的数据。二进制形式虽然安全性很高,但是却大大降低了它的可读性。
通常是使用Base64编码对密钥文件做一下编码,增加可读性;

二、各种疑问

Q1:数据完整性机制,譬如SHA和MD5,跟防纂改的数字签名有什么关系?

消息摘要===>防纂改
数字签名===>防纂改 + 防伪造防抵赖

Q2:用Hmac来做防纂改,和直接用MD5或者SHA来做防纂改,有什么区别?

Hmac使用起来复杂一点,因为需要密钥,但更安全一点;
因为现在各种彩虹表,已经使得MD5或者SHA变得可以反解了~

Q3:数字签名和加密解密的区别?

数字签名是对已有的数据做签名,生成1个额外的签名出来;但是加密算法,是把明文变成密文了;
在网络上传输,如果只有数字签名,表现就是请求体里面加了1个签名的字段,但是请求的其他参数还是明文发送的;
但是如果是加密的话,就是对所有的请求参数都加密,请求就变成密文传输了。
加密解密:私钥加密,公钥解密。
数字签名:私钥签名,公钥验签。

Q3.1:为什么不能用公钥加密,私钥解密?

相对于”私钥加密,公钥解密“的实现,RSA提供了另外一种方式”公钥加密,私钥解密“
但是,用公钥加密数据的方式是否可取呢?
公钥是通过甲方发送给乙方的,其在传递过程中很有可能被截获,也就是说窃听者很有可能获得公钥;
如果窃听者获得了公钥,向甲方发送数据,甲方是无法辨别消息的真伪的;
因此,虽然可以使用公钥对数据加密,但这种方式还是会存在一定的安全隐患;
如果要建立更安全的加密消息传递协议,就需要甲乙两房构建两套非对称加密算法密钥;
仅遵循”私钥加密,公钥解密“的方式进行加密消息传递。

参考资料

《Java加密与解密的艺术》

你可能感兴趣的:(关于加密解密签名等基础知识)