zoukankan      html  css  js  c++  java
  • 公钥、私钥、摘要、数字签名、证书

    常用术语:

    加密:encryption   解密:decryption

    秘钥:secret key (公钥:public key    私钥:private key)

    数字签名:digital signature

    数字证书:digital certificate

    摘要:digest

    一、Base64

    Base64也并不是一种加密解密算法,只能算是一种编码算法,通常用于把二进制数据编码为可写的字符形式的数据,对数据内容进行编码来适合传输(可以对img图像编码用于传输)。这是一种可逆的编码方式。

    更多Base64相关知识可参考博客:base64

    64个字符为:a-z(26个)、A-Z(26个)、0-9(10个)、+ 和 / (2个),共64个。

    二、散列

    常见的散列算法有MD5、SHA1、HMAC。散列算法并不是加密算法。

    1.md5(Message-Digest Algorithm 5)

    密码通常用md5算法加密,虽然不能通过逆向的方式恢复成明文,但是却可以通过碰撞的方式得到原密码或者替代密码。

    (简单具体例子,假设密码是数字2,而hash算法是对原数字进行平方运算,2的平方为4,实际上我们不需要也不可能通过逆向得到原密码2,但只需要找到其替代值-2就足以。)

    md5加盐

    盐,是一串比较复杂的字符串。加盐的目的是加强加密的复杂度,当然这个“盐”越长越复杂,加密后破解起来就越麻烦。加盐并不表示就安全了,“盐”也可能被泄漏出去。

    另外,加盐也不一定加固定的盐。

    2.SHA1(Secure Hash Algorithm)

    SHA-1密码算法,由美国专门制定密码算法的标准机构———美国国家标准技术研究院与美国国家安全局设计,早在1994年就被推荐给美国政府和金融系统采用,是美国政府目前应用最广泛的密码算法。

    3.HMAC(Hash Message Authentication Code)

    散列消息鉴别码,基于密钥的Hash算法的认证协议。

    补充:王小云和她的研究小组已经宣布,成功破解MD5和SHA-1等加密算法。实际上并不是真正意义上的破解,只是提高了碰撞效率。

    三、对称加密和非对称加密

    1.对称加密

    对称加密就是通信双方使用相同的秘钥加密解密。

    对称加密算法有DES、3DES(TripleDES),DESede、AES、Blowfish,以及RC2和RC4算法,还有其他第三方提供的软件包提供的Bouncy Castle 提供的IDEA算法。

    这里面DES算是最经典的算法,DESede是DES算法的变种,AES算是DES算法的替代者;

    AES(Advanced Encryption Standard)

    AES翻译过来是高级加密标准,它是用来替代之前的DES加密算法的。但是因为AES加密算法的安全性要高于DES和3DES,所以AES已经成为了主要的对称加密算法

    更多对称加密算法的知识可参考博客:对称加密及AES加密算法

    2.非对称加密

    非对称加密使用一对密钥:公钥(public key)和私钥(private key)。私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。

    公钥和私钥是成对出现的,它们可以互相解密。公钥加密的内容,只有私钥可以解密。私钥加密的内容,只有公钥可以解密。

    (公钥加密私钥解,私钥签名公钥验证。 )

    主要的非对称加密算法有RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)。

    使用最广泛的是RSA算法,Elgamal是另一种常用的非对称加密算法

    3.选择对称加密还是非对称加密

    截取一段内容,来自对称加密及AES加密算法

    四、数字签名和数字证书

    1.数字签名

    非对称加密算法的效率是非常低的。

    将内容使用hash函数生成摘要,再用私钥对摘要进行加密,生成数字签名。然后将内容附上数字签名一同传输。

    收件方收到后,用公钥对数字签名进行解密,得到摘要,然后再对原内容进行hash生成摘要,比对这两个摘要是否相同,相同则说明内容没有被篡改。

    2.数字证书

    由CA颁发给网站的身份证书,里面包含了该网站的公钥,有效时间,网站的地址,CA的数字签名等。

    所谓的CA数字签名,实际上就是使用了CA的私钥将网站的公钥等信息进行了签名,当客户端请求服务器的时候,网站会把证书发给客户端,客户端首先可以通过CA的数字签名校验CA的身份,也能证明证书的真实完整性。客户端有没有可能到一个假冒的CA去校验数字证书呢?不太可能,因为CA的地址是内嵌在浏览器中的,很难被篡改。

    3.数字证书管理工具

    keytool和openssl都是证书管理工具。openssl和keytool的区别可以参考数字证书管理工具openssl和keytool的区别

    keytool

    keytool是Java自带的数字证书管理工具,用于数字证书的生成,导入,导出与撤销等操作。它与本地密钥库关联,并可以对本地密钥库进行管理,可以将私钥存放于密钥库中,而公钥使用数字证书进行输出。keytool位于jdk安装目录的bin文件夹下。

    openssl

    openssl官网地址:https://www.openssl.org/

    待补充:使用keytool和openssl生成自签名证书步骤

    总结:

    对称加密与解密使用的是相同的密钥,所以速度快,但由于需要将密钥在网络传输,所以安全性不高。

    非对称加密使用了一对密钥:公钥与私钥,所以安全性高,但加密与解密速度慢。

    通常的办法是将对称加密的密钥使用非对称加密的公钥进行加密,然后发送出去,接收方使用私钥进行解密得到对称加密的密钥,然后双方仍然可以使用对称加密来进行沟通。

    参考:

    What is a Digital Signature? (翻译:数字签名是什么?)

  • 相关阅读:
    Emacs教程
    华为上机测试 2015
    奇偶排序
    C语言中的EOF和回车不一样
    jquery 使用方法
    1116
    1115
    1109
    Oracle14~23
    get与post的区别
  • 原文地址:https://www.cnblogs.com/rouqinglangzi/p/10832751.html
Copyright © 2011-2022 走看看