本帖最后由 不死鸟之翼 于 2018-4-22 21:35 编辑
冒个泡 顺便C#大法好 啥都有)
namespace RSATest { class Program { static RSAParameters GenKeyPair() { var RSA = new RSACryptoServiceProvider(); return RSA.ExportParameters(true); } static byte[] Encrypt(byte[] m, byte[] n, byte[] e) { var RSA = new RSACryptoServiceProvider(); var param = new RSAParameters() { Modulus = n, Exponent = e }; RSA.ImportParameters(param); return RSA.Encrypt(m, false); } static byte[] Decrypt(byte[] c, RSAParameters param) { var RSA = new RSACryptoServiceProvider(); RSA.ImportParameters(param); return RSA.Decrypt(c, false); } static void Main(string[] args) { var param = GenKeyPair(); var s = "1234567890abcdef"; var m = Encoding.UTF8.GetBytes(s); var c = Encrypt(m, param.Modulus, param.Exponent); var m2 = Decrypt(c, param); var s2 = Encoding.UTF8.GetString(m2); Console.WriteLine(s); } } }
namespace RSATest
{
class Program
{
static RSAParameters GenKeyPair()
{
var RSA = new RSACryptoServiceProvider();
return RSA.ExportParameters(true);
}
static byte[] Encrypt(byte[] m, byte[] n, byte[] e)
{
var RSA = new RSACryptoServiceProvider();
var param = new RSAParameters()
{
Modulus = n,
Exponent = e
};
RSA.ImportParameters(param);
return RSA.Encrypt(m, false);
}
static byte[] Decrypt(byte[] c, RSAParameters param)
{
var RSA = new RSACryptoServiceProvider();
RSA.ImportParameters(param);
return RSA.Decrypt(c, false);
}
static void Main(string[] args)
{
var param = GenKeyPair();
var s = "1234567890abcdef";
var m = Encoding.UTF8.GetBytes(s);
var c = Encrypt(m, param.Modulus, param.Exponent);
var m2 = Decrypt(c, param);
var s2 = Encoding.UTF8.GetString(m2);
Console.WriteLine(s);
}
}
}
一楼所述的textbook RSA(没有填充)用来展示数学原理没问题,但实际使用会有安全性问题,业界实践都是有padding的 比如OAEP(最优非对称加密填充)
所以用C#你会发现每次加密的结果都不一样)
另外没C#的话还可以用Windows Powershell 反正都是.net)雾
$rsa=New-Object -TypeName "System.Security.Cryptography.RSACryptoServiceProvider"
$arr=[System.Text.Encoding]::UTF8.GetBytes("1234567890abcdef")
echo $rsa.Encrypt($arr,$false)
$rsa=New-Object -TypeName "System.Security.Cryptography.RSACryptoServiceProvider"
$arr=[System.Text.Encoding]::UTF8.GetBytes("1234567890abcdef")
echo $rsa.Encrypt($arr,$false)
|