公钥加密和私钥加密的区别(公钥加密和私钥加密有什么区别)
本人有多年的区块链服务经验,为用户提供专业的服务信息。下面介绍公钥加密和私钥加密的区别,公钥加密和私钥加密的区别是什么。选择可以随时随地为你解决玩币遇到的各种问题。,让你不再担心繁琐的职称评定。
首先,RSA是一种非对称加密算法,由三位数学家(Rivest、Shamir、Adleman)设计。不对称加密是相对于对称加密而言的。。对称加密算法是指加密和解密使用同一个密钥,而非对称加密是用两个密钥(公钥和私钥)加密和解密,可见非对称加密更安全。。顾名思义,公钥是会分发给多个持有者的公钥,而私钥是往往只有一个持有者的私有密码。。公钥和私钥特征公钥和私钥成对出现;私钥文件包含公钥数据,因此可以基于私钥导出公钥;密钥越长越难破解,所以2048位密钥比1024位密钥更安全;公钥和私钥都是密钥,公开的是公钥,不公开的是私钥。。公钥和私钥都可以用于加密和解密。公钥和私钥都可以用于加密和解密操作,用公钥加密的数据只能用相应的私钥解密,反之亦然。。虽然两者都可以用于加密,但是不同的场景使用不同的密钥进行加密。规则如下:1。私钥用于签名,公钥用于验证。签名不是为了保密,而是为了保证签名是由特定的人签名而不是由他人伪造的,所以私钥的私密性适合用于签名目的。。私钥签名后,只能用对应的公钥解密,而公钥是公开的(很多人都可以持有),所以这些人拿着公钥解密。解密成功后,他们可以判断签名是持有私钥的人所为,验证了身份的合法性。。2.公钥用于加密,私钥用于解密,可以起到加密的作用。因为公钥是公开的,很多人都可以持有。。如果是用私钥加密的,那么每个持有公钥的人都可以解密,不安全!如果用公钥加密,只能用私钥解密,私钥是私有的,不公开,只能由特定的私钥持有者解密,以保证数据的安全性。。RSA算法可以概括为四句话:公钥加密、私钥解密、私钥签名、公钥验证。加密是为了防止信息泄露,签名是为了防止信息被篡改。
公钥是您提供给每个人的密钥,
私钥是你保管的钥匙,是你身份的证明。
对方给你发消息,他用你的公钥加密数据。收到消息后,您可以用私钥阅读它。
显然,这相当于两把不同的钥匙。。一把钥匙用来关锁,另一把用来开锁。
常用密钥,加密和解密用同一个密钥,安全性、防伪性、认证性都不好。
公钥和私钥解决了上述问题。
公钥和私钥或非对称密钥和对称密钥是密码系统的两种方式。私钥系统是指加解密密钥相同或容易被导出,所以加解密密钥是保密的。公钥体制是指加解密密钥不能相互推导,公钥是公开的,私钥是保密的。
从上面的定义可以看出,公钥和私钥是两种不同的密码系统,而不是两种不同的应用或两种不同的密钥。因此,公钥和私钥都可以用于加密和签名应用程序。
(1)对称加密
对称加密是最快最简单的加密方法。加密和解密使用相同的密钥,在密码学中称为对称加密算法。由于对称加密的高效率,因此有许多算法。因此它被广泛应用于许多加密协议的核心。
对称加密通常使用相对较小的密钥,一般小于256位。因为密钥越大,加密越强,但是加密和解密的过程越慢。如果你只用1位作为这个密钥,那么黑客可以尝试先用0解密,如果不行再用1解';t工作;但是如果你的密钥是1MB,黑客可能永远破解不了,但是加密和解密的过程需要很长时间。密钥的大小要兼顾安全性和效率。,是一种取舍。2000年10月2日,theNationalInstituteofStandardsandTechnology(NIST-NIST)choseRindalealgorithmasthenewadvancedencryptionstandard(AES-AdvancedEncryptionStandard)..ThenetworkcontainsRijndaelalgorithm,andtheclassnameisRijndaelManaged.Hereisanexampleof
encryptionprocess:
privatestringmyData="hello
私有字符串我的密码="芝麻开门
私有字节[]密文;
私有字节[]salt={0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x5,0x4,0x3,0x2,0x1,0x0};
privatevoidmnussymmetricencryption_Click(对象发送方,路由事件参数e)
{
varkey=newRFC2898derivebytes(我的密码,盐);
//加密数据
var算法=newRijndaelManaged();
算法。钥匙=钥匙.GetBytes(16);
算法IV=键.GetBytes(16);
变量源字节=新系统正文。UnicodeEncoding().GetBytes(我的数据);
使用(varsourcestream=新内存流(源字节))
使用(vardestinationstream=newmemorystream())
使用(varcrypto=newCryptoStream(源文件,算法.CreateEncryptor(),CryptoStreamMode.阅读))
{
移动字节(加密,目的流);
密文=目的地流.toarray();
}
消息框.显示(字符串格式("数据:{0}{1}加密和编码:{2}",我的数据,环境.换行符,转换ToBase64String(密文)));
}
私有空移动字节(流源,流目标)
{
byte[]bytes=newbyte[2048];
VariableCount=Source.Read(Bytes,0,Bytes.Length);
while(0!=count)
{
dest.写(字节,0,计数);
Count=Source.Read(Bytes,0,Bytes.Length);
}
}
Decryptionprocess:
privatevoidmnussymmetricdecryption_Click(对象发送方,路由事件参数e)
{
如果(密文==null)
{
MessageBox.显示("先加密数据!");
返回;
}
varkey=newRFC2898derivebytes(我的密码,盐);
//Attempttodecrypt,thusshowingthatitcangobackandforth.
var算法=newRijndaelManaged();
算法。钥匙=钥匙.GetBytes(16);
算法IV=键.GetBytes(16);
使用(var源流=新内存流(密文))
使用(vardestinationstream=newmemorystream())
使用(varcrypto=newCryptoStream(源文件,算法.CreateDecryptor(),CryptoStreamMode.阅读))
{
移动字节(加密,目的流);
var解密字节=目标流.toarray();
vardecryptedmessage=newunicodeencoding().GetString(
decryptedbytes);(XY002)
消息框。show(decryptedmessage);
}
}
换句话说,对称加密的一个主要缺点是密钥的管理和分发。如何将密钥发送给需要解密你消息的人,是个问题。在发送密钥的过程中,存在着密钥被黑客截获的巨大风险。现实中通常的做法是将对称加密密钥进行非对称加密,然后传输给需要的人。
(2)非对称密码学
1976年,美国学者Dime和Henman提出了一种新的密钥交换协议,解决了公开信息传输和密钥管理的问题。公钥系统允许在不安全介质上的通信双方交换信息并安全地达成一致的密钥。与对称加密算法相比,这种方法也称为非对称加密算法。
非对称加密为数据加密和解密提供了一种非常安全的方法,它使用一对密钥,公钥和私钥。私钥只能由一方安全保管,不能泄露。并且公钥可以被发送给请求它的任何人。非对称加密使用其中一个密钥进行加密,而解密需要另一个密钥。比如,你向银行要一个公钥,银行会发给你,你用它来加密消息。那么只有私钥的持有者——银行才能解密你的消息。与对称加密不同,银行不需要通过网络发送私钥,安全性大大提高。
目前最常用的非对称加密算法是RSA算法。它是由Rivest,Shamir和Adleman在1978年发明的,当时他们都在麻省理工学院。中还有RSA算法。NET,请看下面的例子:
加密过程:
。privatebyte[]RSAciphertext;
privatevoidmnuAsymmetricEncryption_Click(对象发送方,路由事件参数e)
{
varRSA=1;
//加密数据varcspParms=新CSP参数(RSA);
cspParms.Flags=CspProviderFlags.使用使用机器密钥库
cspParms.KeyContainerName="我的钥匙"
var算法=newRSACryptoServiceProvider(CSPparms);
var源字节=新的unicode编码().GetBytes(我的数据);
RSA密文=算法Encrypt(sourceBytes,true);
messagebox.Display(string.Format(_"Data:{0}{1}Encryptionandcoding:{2}"
Mydata,environment.Linefeed,
conversion.Tobase64string(RSAciphertext));
}
Decryptionprocess:
privatevoidmnuasymmetricdecryption_Click(对象发送方,路由事件参数e)
{
if(RSAcipher==null)
{
MessageBox.显示("先加密!");
返回;
}
varRSA=1;
//解密数据varcspParms=新CSP参数(RSA);
cspParms.Flags=CspProviderFlags.使用使用机器密钥库
cspParms.KeyContainerName="我的钥匙"
var算法=newRSACryptoServiceProvider(CSPparms);
var未加密=算法。解密(RSA密文,真);
messagebox.Show(newUnicodeEncoding().GetString(unencrypted));
}
Althoughasymmetricencryptionisverysecure,但是相对于对称加密来说,它是非常慢的,所以我们还是需要使用对称加密来传输消息,但是对称加密使用的密钥可以通过非对称加密发送出去。为了解释这个过程,请看下面的例子:
(1)Alice需要在银行进行交易';她的浏览器老师创建了一个随机数作为对称密钥。
(2)爱丽丝';的浏览器向银行请求公钥';的网站。
(3)银行将公钥发送给爱丽丝。
(4)爱丽丝';的浏览器使用银行';的公钥来加密她的对称密钥。
(5)爱丽丝';的浏览器将加密的对称密钥发送给银行。
(6)银行用私钥解密得到Alice的对称密钥';的浏览器。
(7)Alice和银行可以使用对称密钥对通信内容进行加密和解密。
(3)摘要
(1)对称加密加密和解密使用同一个密钥,所以速度高,但由于密钥需要在网络上传输,安全性不高。
(2)非对称加密使用一对密钥,一个公钥一个私钥,安全性高,但加解密速度慢。。
(3)解决方法是用非对称加密公钥加密对称加密密钥,然后发送出去。接收方用私钥对其进行解密,获得对称加密密钥,然后双方就可以使用对称加密相互通信了。
如果单方面使用非对称加密算法,实际上有两种方式,目的不同。
第一种是签名,使用私钥加密和公钥解密。它用于所有公钥所有者验证私钥所有者的身份,并防止私钥所有者发布的内容被篡改。但是,它并不用于确保内容不会被他人获取。
第二种是加密,使用公钥加密和私钥解密向公钥所有者发布信息。这些信息可能被别人篡改,但别人无法获取。
如果甲方要发送一个安全保密的数据给乙方,那么甲乙双方应该各有一个私钥。甲方应与B'方对该数据进行加密;的公钥,然后用自己的私钥对这个加密的数据进行加密,最后发送给乙方,这样就保证了内容不会被读取或篡改。
相信在介绍了公钥加密和私钥加密的区别以及公钥加密和私钥加密的区别之后,你对公钥加密和私钥加密的区别有了更透彻的了解。谢谢大家的支持和关心!