本文将讨论公钥加密与私钥加密的区别,以及加密是公钥还是私钥对应的知识点。欧意致力于为用户带来全面可靠的货币圈信息,希望对您有所帮助!
公钥和私钥或非对称密钥和对称密钥是密码系统的两种方式。私钥系统是指加解密的密钥相同或易于启动,因此加解密的密钥是保密的。公钥系统是指加解密钥不能相互启动,公钥公开,私钥保密。
从上面的定义可以看出,公钥和私钥是两种不同的密码系统,而不是两种不同的应用程序或两种不同的密钥。因此,公钥和私钥可以用于加密和签名应用程序。
如果单方面采用不对称加密算法,实际上有两种方法可以用于不同的用途.
第一种是签名,使用私钥加密,公钥解密,让所有公钥所有者验证私钥所有者的身份,防止私钥所有者发布的内容被篡改。但不需要确保内容不被他人获得.
二是加密,公钥加密,私钥解密,向公钥所有者发布信息,可能被他人篡改,但不能被他人获得.
如果A想给B发一个安全的保密数据,那么A和B应该有自己的私钥,A先用B的公钥加密这个数据,然后用自己的私钥加密这个加密的数据。最后发送给B,以确保内容不会被读取或篡改.
公钥加密
,
私钥
解密。
他只是两个算法,而不是密码,发送一串公钥加密的字符
服务器端
之后,他通过私钥将这串字符还原为您输入的原始字符
原始数据
(一)对称加密(Symmetric Cryptography)
对称加密是最快、最简单的加密方法(encryption)与解密(decryption)使用相同的密钥(secret key),这种方法在密码学中被称为对称加密算法。对称加密的算法有很多种,因为它的效率很高,所以广泛应用于许多加密协议的核心。
对称加密通常使用相对较小的密钥,通常小于256 bit。密钥越大,加密越强,但加密和解密过程越慢。如果你只用1 bit做这个密钥,黑客可以先试着用0解密,不行的话再用1解密;但是如果你的密钥有1 黑客可能永远无法破解MB,但加密和解密需要很长时间。密钥的大小不仅要考虑安全性,还要考虑效率。这是一个trade-off。
2000年10月2日,美国国家标准与技术研究所(NIST–American National Institute of Standards and Technology)选择Rijndael算法作为新的高级加密标准(AES–Advanced Encryption Standard)。.NET包含Rijndael算法,类名为RijndaelManaged,下面举个例子。
加密过程:
private string myData = “hello”;
private string myPassword = “OpenSesame”;
private byte[] cipherText;
private byte[] salt = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x5, 0x4, 0x3, 0x2, 0x1, 0x0 };
private void mnuSymmetricEncryption_Click(object sender, RoutedEventArgs e)
{
var key = new RFC2898deriveBytestestes(myPassword, salt);
// Encrypt the data.
var algorithm = new RijndaelManaged();
algorithm.Key = key.GetBytes(16);
algorithm.IV = key.GetBytes(16);
var sourceBytes = new System.Text.UnicodeEncoding().GetBytes(myData);
using (var sourceStream = new MemoryStream(sourceBytes))
using (var destinationStream = new MemoryStream())
using (var crypto = new CryptoStream(sourceStream, algorithm.CreateEncryptor(), CryptoStreamMode.Read))
{
moveBytes(crypto, destinationStream);
cipherText = destinationStream.ToArray();
}
MessageBox.Show(String.Format(“Data:{0}{1}Encrypted and Encoded:{2}”, myData, Environment.NewLine, Convert.Tobase64String(cipherText)));
}
private void moveBytes(Stream source, Stream dest)
{
byte[] bytes = new byte[2048];
var count = source.Read(bytes, 0, bytes.Length);
while (0 != count)
{
dest.Write(bytes, 0, count);
count = source.Read(bytes, 0, bytes.Length);
}
}
解密过程:
private void mnuSymmetricDecryption_Click(object sender, RoutedEventArgs e)
{
if (cipherText == null)
{
MessageBox.Show(“Encrypt Data First!”);
return;
}
var key = new RFC2898deriveBytestestes(myPassword, salt);
// Try to decrypt, thus showing it can be round-tripped.
var algorithm = new RijndaelManaged();
algorithm.Key = key.GetBytes(16);
algorithm.IV = key.GetBytes(16);
using (var sourceStream = new MemoryStream(cipherText))
using (var destinationStream = new MemoryStream())
using (var crypto = new CryptoStream(sourceStream, algorithm.CreateDecryptor(), CryptoStreamMode.Read))
{
moveBytes(crypto, destinationStream);
var decryptedBytes = destinationStream.ToArray();
var decryptedMessage = new UnicodeEncoding().GetString(
decryptedBytes);
MessageBox.Show(decryptedMessage);
}
}
对称加密的一个主要缺点是密钥的管理和分配。换句话说,如何向需要解密信息的人发送密钥是一个问题。在发送密钥的过程中,黑客拦截密钥的风险很大。实际上,通常的方法是对对称加密的密钥进行非对称加密,然后传递给需要它的人。
(二)非对称加密(Asymmetric Cryptography)
1976年,为了解决信息披露传输和密钥管理问题,美国学者Dime和Henman提出了一项新的密钥交换协议,允许双方在不安全的媒体上交换信息,并安全地达成一致的密钥,即“披露密钥系统”。与“对称加密算法”相比,这种方法也被称为“非对称加密算法”。
非对称加密为数据的加密和解密提供了一种非常安全的方法。它使用一对密钥和公钥(public key)和私钥(private key)。私钥只能由一方安全保管,不能泄漏,而公钥可以发送给任何要求它的人。非对称加密使用这对密钥中的一个进行加密,而解密则需要另一个密钥。例如,如果您向银行要求公钥,银行将公钥发送给您,并且您使用公钥加密消息,则只有私钥持有人–银行可以解密你的消息。与对称加密不同,银行不需要通过网络发送私钥,因此安全性大大提高。
RSA算法是Rivest,是目前最常用的非对称加密算法, Shamir, 和Adleman于1978年发明,当时都是在MIT。.RSA算法也存在于NET中,请参见以下例子:
加密过程:
private byte[] rsaCipherText;
private void mnuAsymmetricEncryption_Click(object sender, RoutedEventArgs e)
{
var rsa = 1;
// Encrypt the data.
var cspParms = new CspParameters(rsa);
cspParms.Flags = CspProviderFlags.UseMachineKeyStore;
cspParms.KeyContainerName = “My Keys”;
var algorithm = new RSACryptoServiceProvider(cspParms);
var sourceBytes = new UnicodeEncoding().GetBytes(myData);
rsaCipherText = algorithm.Encrypt(sourceBytes, true);
MessageBox.Show(String.Format(“Data: {0}{1}Encrypted and Encoded: {2}”,
myData, Environment.NewLine,
Convert.64Str4SToBaseing(rsaCipherText)));
}
解密过程:
private void mnuAsymmetricDecryption_Click(object sender, RoutedEventArgs e)
{
if(rsaCipherText==null)
{
MessageBox.Show(“Encrypt First!”);
return;
}
var rsa = 1;
// decrypt the data.
var cspParms = new CspParameters(rsa);
cspParms.Flags = CspProviderFlags.UseMachineKeyStore;
cspParms.KeyContainerName = “My Keys”;
var algorithm = new RSACryptoServiceProvider(cspParms);
var unencrypted = algorithm.Decrypt(rsaCipherText, true);
MessageBox.Show(new UnicodeEncoding().GetString(unencrypted));
}
虽然非对称加密非常安全,但与对称加密相比,它非常慢,所以我们仍然需要使用对称加密来传输信息,但我们可以通过非对称加密发送对称加密使用的密钥。为了解释此过程,请参见以下示例:
(1) Alice需要在银行网站上进行交易,她的浏览器首先生成了一个随机数作为对称密钥。
(2) Alice的浏览器向银行网站要求公钥。
(3) 银行向Alice发送公钥。
(4) Alice浏览器使用银行公钥加密自己的对称密钥。
(5) Alice浏览器向银行发送加密的对称密钥。
(6) Alice浏览器的对称密钥由银行使用私钥解密。
(7) Alice和银行可以使用对称密钥加密和解密通信内容。
(三)总结
(1) 对称加密和解密使用相同的密钥,因此速度快,但由于需要在网络中传输密钥,因此安全性不高。
(2) 一对密钥、公钥和私钥用于非对称加密,因此安全性高,但加密和解密速度慢。
(3) 解决办法是用非对称加密公钥加密对称加密密钥,然后发送出去。接收方使用私钥解密获得对称加密钥,然后双方可以使用对称加密进行沟通。
看完了吗?我相信你现在对公钥加密和私钥加密的区别有了初步的了解!您还可以收集欧洲和意大利页面,以获得更多关于加密是公钥还是私钥的知识!区块链和虚拟货币,我们是认真的!
欧易安卓下载:立即前往
欧易IOS下载:立即前往打开APP,领取最高价值60,000元数字货币盲盒
本平台所提供的金融投资信息仅供参考,不构成任何投资建议。投资者应该自行承担投资风险,并根据自己的实际情况进行决策