首页 新闻 会员 周边 捐助

关于私钥加密,公钥解密的算法安全.网上介绍的大素数那个方法可靠么?求算法达人

0
[待解决问题]

正在做不对称加密,知道公钥加密,私钥解密和私钥加密,公钥解密原理上应该是对称的.并且也的确都会用到.但微软似乎没有提供私钥加密,公钥解密的东东.

于是查了一下,找到很多介绍大素数加密的.

以下代码是直接粘贴别人的,我算法方面不是太好,希望达人给看看,这样的算法安全么?即使原封不动的使用,也就是说别人知道我的算法,安全上也没问题么?我个人也在很努力的想懂这个算法.

 功能:用指定的私钥(n,d)加密指定字符串source 
                

string EncryptString(string source, BigInteger d, BigInteger n)
private string EncryptString(string source, BigInteger d, BigInteger n) 
...{
int len = source.Length;
int len1 = 0;
int blockLen = 0;
if ((len % 128) == 0)
len1 = len / 128;
else
len1 = len / 128 + 1;
string block = "";
string temp = "";
for (int i = 0; i < len1; i++)
...{
if (len >= 128)
blockLen = 128;
else
blockLen = len;
block = source.Substring(i * 128, blockLen);
byte[] oText = System.Text.Encoding.Default.GetBytes(block);
BigInteger biText = new BigInteger(oText);
BigInteger biEnText = biText.modPow(d, n);
string temp1 = biEnText.ToHexString();
temp += temp1;
len -= blockLen;
}
return temp;
}


功能:用指定的公钥(n,e)解密指定字符串source 

string DecryptString(string source, BigInteger e, BigInteger n)
private string DecryptString(string source, BigInteger e, BigInteger n) 
...{
int len = source.Length;
int len1 = 0;
int blockLen = 0;
if ((len % 256) == 0)
len1 = len / 256;
else
len1 = len / 256 + 1;
string block = "";
string temp = "";
for (int i = 0; i < len1; i++)
...{
if (len >= 256)
blockLen = 256;
else
blockLen = len;
block = source.Substring(i * 256, blockLen);
BigInteger biText = new BigInteger(block, 16);
BigInteger biEnText = biText.modPow(e, n);
string temp1 = System.Text.Encoding.Default.GetString(biEnText.getBytes());
temp += temp1;
len -= blockLen;
}
return temp;
}

 

加密过程和解密过程代码如下所示:

加密过程,其中d、n是RSACryptoServiceProvider生成的D、Modulus 
 

string EncryptProcess(string source, string d, string n)
                private string EncryptProcess(string source, string d, string n) 
...{
byte[] N = Convert.FromBase64String(n);
byte[] D = Convert.FromBase64String(d);
BigInteger biN = new BigInteger(N);
BigInteger biD = new BigInteger(D);
return EncryptString(source, biD, biN);
}

解密过程,其中e、n是RSACryptoServiceProvider生成的Exponent、Modulus 

DecryptProcess(string source, string e, string n)
private string DecryptProcess(string source, string e, string n) 
...{
byte[] N = Convert.FromBase64String(n);
byte[] E = Convert.FromBase64String(e);
BigInteger biN = new BigInteger(N);
BigInteger biE = new BigInteger(E);
return DecryptString(source, biE, biN);
}
hax2的主页 hax2 | 菜鸟二级 | 园豆:202
提问于:2011-10-17 17:51
< >
分享
所有回答(1)
0

(e,n)是私钥,(d,n)是公钥==>它们之间是一对的关系

目前来说,算法过程本身是公开的,也认为是安全的。

小彬 | 园豆:947 (小虾三级) | 2011-10-19 13:07

另外,RSACryptoServiceProvider已经实现了加密、解密过程

请参见别人的文章:

http://www.cnblogs.com/myitm/archive/2010/11/16/1878834.html

支持(0) 反对(0) 小彬 | 园豆:947 (小虾三级) | 2011-10-19 13:09

(e,n)是私钥,(d,n)是公钥==>它们之间是一对的关系

公钥、私钥都不是由人来选择的

而在对称加密中,密钥是人来选择的

支持(0) 反对(0) 小彬 | 园豆:947 (小虾三级) | 2011-10-19 13:20
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册