RSA,非對稱加密,簡單可以理解為現(xiàn)在有兩把鑰匙,一把只能用來開,一把只能用來關(guān),所以這跟前面寫的對稱加密是不一樣的;
原理和算法的話,不談。。。還是自己去查吧,費腦子。
主要說下優(yōu)缺點吧,首先就是RSA的安全性高,嗯,很高,比DES和AES要高很多,但由于密鑰長度或者算法復(fù)雜度的提高就會帶來性能的損失,所以RSA的效率就比較低,所以我們一般不會采用RSA加密一些大的數(shù)據(jù),如果非要加密的話,可以采用混合加密,比如DES或者AES來加密數(shù)據(jù),用RSA來加密密鑰;或者采用分塊加密的方式,即只加密其中一部分或者關(guān)鍵部分。
RSA一般公鑰用來加密,私鑰用來做解密,所以我們這里需要預(yù)先生成兩把密鑰。生成密鑰的方式也有很多種,這里就采用最直接的方式了。
實現(xiàn)功能:
開發(fā)環(huán)境:
開發(fā)工具:Visual Studio 2013
.NET Framework版本:4.5
實現(xiàn)代碼:
public static RsaKey createKey()
{
RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider();
RsaKey rsaKey = new RsaKey();
rsaKey.PublicKey=rsaProvider.ToXmlString(false);
rsaKey.PrivateKey = rsaProvider.ToXmlString(true);
return rsaKey;
}
public static byte[] Encrypt(RsaModel rsaModel)
{
RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider();
byte[] result = null;
try
{
rsaProvider.fromXmlString(rsaModel.Key);
result = rsaProvider.Encrypt(rsaModel.Data, false);
}
catch { }
return result;
}
public static byte[] Decrypt(RsaModel rsaModel)
{
RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider();
byte[] result = null;
try
{
rsaProvider.fromXmlString(rsaModel.Key);
result = rsaProvider.Decrypt(rsaModel.Data, false);
}
catch { }
return result;
}
public static string Encrypt(string data, string key)
{
byte[] bytes = Encoding.UTF8.GetBytes(data);
byte[] result = Encrypt(new RsaModel
{
Data = bytes,
Key = key
});
if (result == null)
{
return "";
}
return Convert.ToBase64String(result);
}
public static string Decrypt(string data, string key)
{
byte[] bytes = Convert.fromBase64String(data);
byte[] result = Decrypt(new RsaModel
{
Data = bytes,
Key = key
});
if (result == null)
{
return "";
}
return Encoding.UTF8.GetString(result);
}
public class RsaKey
{
public string PublicKey { get; set; }
public string PrivateKey { get; set; }
}
public class RsaModel
{
public byte[] Data { get; set; }
public string Key { get; set; }
}
RsaUtil.RsaKey rsaKey = new RsaUtil.RsaKey();
private void btn_Rsa_Encrypt_Click(object sender, EventArgs e)
{
rsaKey = RsaUtil.createKey();
string result = RsaUtil.Encrypt(textBox1.Text, rsaKey.PublicKey);
textBox2.Text = result;
}
private void btn_Rsa_Decrypt_Click(object sender, EventArgs e)
{
string result = RsaUtil.Decrypt(textBox2.Text, rsaKey.PrivateKey);
textBox1.Text = result;
}
實現(xiàn)效果:
該文章在 2023/2/27 10:27:27 編輯過