关于CA、签名、证书、非对称加密、摘要、公私钥匙和keystore概念和区别

关于CA、签名、证书、非对称加密、摘要、公私钥匙和keystore概念和区别,第1张

这几个概念才接触密码学时候理解不是很到位,现在将其理清楚,写下自己的理解。

公私秘钥对可以通过一种算法得到。
公钥:公开的,都可以拿到的秘钥。用来加密也用来解密,公钥加密的信息只能用对应私钥来解。

私钥:只有一个持有者,其他人都拿不到。用来加密也用来解密,私钥加密的信息只有对应的公钥能解。因为私钥具有唯一性,可以用来鉴别身份。需要注意的是私钥的唯一性是针对自己的公钥来说的。

对称加密:过程使用两把不同的钥匙加解密,私钥加密只能用公钥解,公钥加密用私钥解,一般流程为:A生成公私密钥对,把公钥给B,B用公钥加密信息发送给A,A用私钥解密。

摘要:对任意一组输入数据通过算法进行计算,得到一个固定长度的输出摘要,常见RSA公司的MD5算法和SHA-1算法。

签名:包含两部分:对所签信息做摘要运算得到一个结果值,在运用非对称加密中的私钥对这个值进行加密(比如app签名就是对app自身文件做多次摘要,然后私钥加密,>带。在opp-2000服务器的使用说明中可知,OPP-2000功能带解密功能,是带解密的。服务器(server)指在网络环境中或在具有客户服务器结构(参见客户和服务器计算)的分布式管理环境中,为客户的请求提供服务的节点计算机,或指在该计算机上运行的,用于管理资源并为用户提供服务的计算机软件。

在一些安全性要求较高的项目中,我们希望客户端请求数据可以做到数据加密,服务器端进行解密。(单纯的>在WEB网站开发过程中,如果我们将数据库连接字符串封装到DLL文件中,将会给数据库和程序的迁移带来麻烦,因为万一服务器地址或
者数据库发生变更,那么我们就不得不修改源程序并重新将其编译。更好的解决方法是将数据库连接字符串写入到webconfig配置文件中,可问题是将连
接字符串写入到webconfig文件中之后,任何人都能打开看到所连接的数据库名和密码,又会带来安全隐患,因此为了保证数据库的安全性,我们可以通
过使用微软IDE自带的命令aspnet_regiisexe将配置文件webconfig中指定的标签进行加密,如果以后想查看加密后的连接字符
串,我们还可以使用aspnet_regiisexe将加密后的字符串进行解密。
1 加密通用语法
加密一个特定网站的webconfig文件的通用形式
aspnet_regiisexe -pef secion physical_directory -prov provider

aspnet_regiisexe -pe secion -app virtual_directory -prov provider
其中,各个参数的含义如下:
section表示要加密的配置节
physical_directory用于指定站点的物理路径。
virtual_directory用户指定虚拟路径。
provider指定加密提供程序。
加密一个特定站点的连接字符串就是:
aspnet_regiisexe -pef "connectionStrings" "你的web项目路径" -prov "DataProtectionConfigurationProvider"
其中DataProctionConfiguartionProvider是Windows数据保护API(DPAPI)提供程序,它使用Windows内置的密码学技术来加解密配置节。默认情况下,这个提供程序使用本机的密钥。
2 加密方法
运行Visual Studio 2008命令提示
加密后的结果
<connectionStrings configProtectionProvider="DataProtectionConfigurationProvider">
<EncryptedData>
<CipherData> <CipherValue>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAy1WyvzomB0WAlqYo+ogiigQAAAACAAAAAAADZgAAqAAAABAAAADbDjp+bAce//lsg/so66+8AAAAAASAAACgAAAAEAAAANlF3b73Kdupv/cAf4a9nPUwAQAAoTvrHdAjNjaJFEfiG7pD6sG8GMNJKGpnd4JLchu7W9XhOuPgG4C/LD9H9WQ9uF3t/0MoMI9tbrWdFJ1Yu5/e3PAV4RCbCvDlPD0VC7hxtDMqfRjQ+1OhTdk2woiSNpx0TzXwZE25o4vlXq/aYri1Wmlo2zyRqSkg0hQFQbObCf7lrgWEUjsv+pEOS5OVXcgNhFipVMy5iQ8sH5fNHmGg8gu5JlZQaOqYFG8ci7MGOebcQzR67krJXRBrs26lZtAj8lzf2bK+QcSqtU7Rt4C33JbLqisPL9xhfoUl9GvGTu5VS1S1H5VtErTeYXxnL7PTIr3cNjIbDMjI48LJfoOgtymT35KUdK3J0DxB68DqPaeK5QSEC/L0+6bizStRZ7BDnOngV/XfiVJnbSNYXX5IShQAAACuGn8QGUuQ4TOzkKcc891SV/CVDQ==</CipherValue>
</CipherData>
</EncryptedData>
lt;/connectionStrings>
3 解密
解密该连接字符串也很简单
aspnet_regiisexe -pdf "connectionStrings" '你的web项目路径"
解密后的结果:
<connectionStrings>
<add name="Sql" connectionString="Data Source=;Initial Catalog=MySchool;Integrated Security=True" />
</connectionStrings>
4 后台代码读取配置文件webconfig中数据库连接字符串的方法:
using SystemConfiguation;

protected void Page_Load(object sender, EventArgs e)
{
lblMessageText = ConfigurationManagerConnectionStrings["Sql"]ToString();
}

5 在连接字符串的加密和解密的过程中,需要注意一下几点。
使用加密的连接字符串
使用加密的连接字符串不需要编码解密,ASPNET会自动对加密内容进行解密。
加密和解密在同一台计算机上使用
在加密过程中,使用了一个基于本机的密钥。这就意味着加密和解密必须在同一台计算机上进行,否则将不能解密。同时,在一台计算机上加密的配置,在另一台计算机上将不能正常使用。
中文路径问题
该命令对中文支持不是很好。如果站点的路径中有中文字符,也许不能正常加解密。

对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key)。对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中。

对称加密通常使用的是相对较小的密钥,一般小于256 bit。因为密钥越大,加密越强,但加密与解密的过程越慢。如果你只用1 bit来做这个密钥,那黑客们可以先试着用0来解密,不行的话就再用1解;但如果你的密钥有1 MB大,黑客们可能永远也无法破解,但加密和解密的过程要花费很长的时间。密钥的大小既要照顾到安全性,也要照顾到效率,是一个trade-off。

对称加密的一大缺点是密钥的管理与分配,换句话说,如何把密钥发送到需要解密你的消息的人的手里是一个问题。在发送密钥的过程中,密钥有很大的风险会被黑客们拦截。现实中通常的做法是将对称加密的密钥进行非对称加密,然后传送给需要它的人。

常用的有:DES、AES

非对称加密为数据的加密与解密提供了一个非常安全的方法,它使用了一对密钥,公钥(public key)和私钥(private key)。私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。非对称加密使用这对密钥中的一个进行加密,而解密则需要另一个密钥。比如,你向银行请求公钥,银行将公钥发给你,你使用公钥对消息加密,那么只有私钥的持有人--银行才能对你的消息解密。与对称加密不同的是,银行不需要将私钥通过网络发送出去,因此安全性大大提高。

常用的有:RSA

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

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

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

在现代密码体制中加密和解密是采用不同的密钥(公开密钥),也就是非对称密钥密码系统,每个通信方均需要两个密钥,即公钥和私钥,这两把密钥可以互为加解密。公钥是公开的,不需要保密,而私钥是由个人自己持有,并且必须妥善保管和注意保密。

公钥私钥的原则:

非对称密钥密码的主要应用就是公钥加密和公钥认证,而公钥加密的过程和公钥认证的过程是不一样的,下面我就详细讲解一下两者的区别。

比如有两个用户Alice和Bob,Alice想把一段明文通过双钥加密的技术发送给Bob,Bob有一对公钥和私钥,那么加密解密的过程如下:

上面的过程可以用下图表示,Alice使用Bob的公钥进行加密,Bob用自己的私钥进行解密。

身份认证和加密就不同了,主要用户鉴别用户的真伪。这里我们只要能够鉴别一个用户的私钥是正确的,就可以鉴别这个用户的真伪。

还是Alice和Bob这两个用户,Alice想让Bob知道自己是真实的Alice,而不是假冒的,因此Alice只要使用公钥密码学对文件签名发送 给Bob,Bob使用Alice的公钥对文件进行解密,如果可以解密成功,则证明Alice的私钥是正确的,因而就完成了对Alice的身份鉴别。整个身 份认证的过程如下:

上面的过程可以用下图表示,Alice使用自己的私钥加密,Bob用Alice的公钥进行解密。

DES是Data Encryption Standard(数据加密标准)的缩写,DES算法为密码体制中的对称密码体制。它是由IBM公司研制的一种加密算法,美国国家标准局于1977年公布把它作为非机要部门使用的数据加密标准,二十年来,它一直活跃在国际保密通信的舞台上,扮演了十分重要的角色。
DES是一个分组加密算法,他以64位为分组对数据加密。同时DES也是一个对称算法:加密和解密用的是同一个算法。它的密匙长度是56位(因为每个第8位都用作奇偶校验),密匙可以是任意的56位的数,而且可以任意时候改变。其中有极少量的数被认为是弱密匙,但是很容易避开他们。所以保密性依赖于密钥。
特点:分组比较短、密钥太短、密码生命周期短、运算速度较慢。 DES算法具有极高安全性,到目前为止,除了用穷举搜索法对DES算法进行攻击外,还没有发现更有效的办法。而56位长的密钥的穷举空间为256,这意味着如果一台计算机的速度是每一秒种检测一百万个密钥,则它搜索完全部密钥就需要将近2285年的时间。

DES现在已经不视为一种安全的加密算法,因为它使用的56位秘钥过短,以现代计算能力,24小时内即可能被破解。也有一些分析报告提出了该算法的理论上的弱点,虽然实际情况未必出现。该标准在最近已经被 高级加密标准 (AES)所取代。

高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的 DES ,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。

AES的区块长度固定为128 位元 ,密钥长度则可以是128,192或256位元。

RSA加密算法是一种 非对称加密算法 。在 公钥加密标准 和 电子商业 中RSA被广泛使用。RSA是 1977年 由 罗纳德·李维斯特 (Ron Rivest)、 阿迪·萨莫尔 (Adi Shamir)和 伦纳德·阿德曼 (Leonard Adleman)一起提出的。当时他们三人都在 麻省理工学院 工作。RSA就是他们三人姓氏开头字母拼在一起组成的。

RSA算法利用两个很大的质数相乘所产生的乘积来加密。这两个质数无论哪一个先与原文件编码相乘,对文件加密,均可由另一个质数再相乘来解密。但要用一个 质数来求出另一个质数,则是十分困难的。因此将这一对质数称为密钥对(Key Pair)。在加密应用时,某个用户总是将一个密钥公开,让需发信的人员将信息用其公共密钥加密后发给该用户,而一旦信息加密后,只有用该用户一个人知道 的私用密钥才能解密。具有数字凭证身份的人员的公共密钥可在网上查到,亦可在请对方发信息时主动将公共密钥传给对方,这样保证在Internet上传输信 息的保密和安全。

开发中:

客户端发送的敏感数据时需要加密处理,客户端数据采用公钥加密,服务器用对应的秘钥解密,客户端保存公钥,服务器保存秘钥

服务器发送的数据也要加密时,服务器端数据采用秘钥加密,客户端数据用对应的公钥加密,客户端保存公钥,服务器保存秘钥

服务器要认证客户端时,客户端数据采用秘钥加密,服务器用对应的公钥解密,客户端保留秘钥,服务器保留公钥

常用加解密方案:

如果想要更加安全一点,可以在仿照微信的通信,每次都在传输数据上加上一个32为随机数和并将数据按照一定的规则生成一个校验sign


>

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/12607832.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存