那位对RSA加密比较懂得。帮忙看个问题

mcxiaoabc 2012-02-24 10:02:28
www.mcxiao.net/a.js 代码贴不上大家打开这个地址。具体打开可以在这里看

这是一段 JS实现的RS加密。
我现在想用C# 去实现 应该怎么弄
先说一下请求一个地址
返回的东西
NgbSecurity.HandleResponse('<nxaml><object name="result">
<string name="e" value="010001" /><string name="m" value="A3A69317FB92A534912A0999A7EEE826358C05F434
C5E1EDB61C68E882CE52F7573FA44CE46E858673A8A328E17
712FDAAECF383F13ECC1FD9D1505D2F23C983AD36F9517
88DEE30F1AE2A34F2DB13E46C409980A5467E05C7667AAD8
96464ABB073AA01AAFE130E28FA4D3D6A57ECA8422A482E22C5E0BA67434160B95A68DF" />
<string name="h" value="ivbol+DfWZPecQS5hhZxtflgGzQ=" /></object></nxaml>');



其中E应该是公钥 "010001" M是 modulus

A3A69317FB92A534912A0999A7EEE826358C05F434C5E1E
DB61C68E882CE52F7573FA44CE46E858673A8A328E17712F
DAAECF383F13ECC1FD9D1505D2F23C983AD36F951788DEE30F1A
E2A34F2DB13E46C409980A5467E05C7667AAD896464ABB073AA01AAF
E130E28FA4D3D6A57ECA8422A482E22C5E0BA67434160B95A68DF
对应的JS

RSAKeyPair = function( encryptionExponent, decryptionExponent, modulus )
{
this.e = biFromHex( encryptionExponent );
this.d = biFromHex( decryptionExponent );
this.m = biFromHex( modulus );

this.digitSize = 2 * biHighIndex( this.m ) + 2;
this.chunkSize = this.digitSize - 11;

this.radix = 16;
this.barrett = new BarrettMu( this.m );
}


请问上面这一步是做什么用的 数字签名吗?我不太明白RSA 请高手给个C#的实现方法。
...全文
772 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
mcxiaoabc 2012-02-25
  • 打赏
  • 举报
回复
010001公钥 好像很郁闷的说
mcxiaoabc 2012-02-25
  • 打赏
  • 举报
回复
现在主要问题我想知道怎么通过第三方提供的公钥加密
mcxiaoabc 2012-02-25
  • 打赏
  • 举报
回复
没人回答了吗
mcxiaoabc 2012-02-25
  • 打赏
  • 举报
回复
JS加密后的结果是256 费解啊RSA 加密的长度固定吗?
mcxiaoabc 2012-02-25
  • 打赏
  • 举报
回复
byte[] exponent = new byte[]{1,0,1};
int e = BitConvert.ToInt32(exponent);
然后这个e就等于65537
这个语法也过不了呀 老大有QQ方便加下吗
qldsrx 2012-02-25
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 mcxiaoabc 的回复:]
好像是呀 楼上的QQ多少呢 那 010001 的BYTE是多少?
[/Quote]
你WINDOWS自带的那个计算器,在二进制模式下输入那个数,然后切换到10进制不就看到了吗?
mcxiaoabc 2012-02-25
  • 打赏
  • 举报
回复
好像转换了不是这个结果呀
mcxiaoabc 2012-02-25
  • 打赏
  • 举报
回复
好像是呀 楼上的QQ多少呢 那 010001 的BYTE是多少?
qldsrx 2012-02-25
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 mcxiaoabc 的回复:]
我在MSDN找到的 代码显示的是这个Exponent = {1,0,1}; 可是我那个010001那个明显不是这个 所以啊郁闷死了
[/Quote]
答案见#7楼
byte[] exponent = new byte[]{1,0,1};
int e = BitConvert.ToInt32(exponent);
然后这个e就等于65537
mcxiaoabc 2012-02-25
  • 打赏
  • 举报
回复
我在MSDN找到的 代码显示的是这个Exponent = {1,0,1}; 可是我那个010001那个明显不是这个 所以啊郁闷死了
mcxiaoabc 2012-02-25
  • 打赏
  • 举报
回复
CSDN不让贴代码 一帖就报错我蛋疼
mcxiaoabc 2012-02-25
  • 打赏
  • 举报
回复
你QQ号多少呀
muyi66 2012-02-25
  • 打赏
  • 举报
回复
RSA算法本身处理的是二进制流,无所谓编码问题。不管用什么编码的明文都能算出密文来。
muyi66 2012-02-25
  • 打赏
  • 举报
回复
那个是很多片断,让你看代码的,又没有完整的程序。。。。。。

mcxiaoabc 2012-02-25
  • 打赏
  • 举报
回复
郁闷贴代码提示我非法字符。我的意思是说EXPONENT这个参数问题 这个值到底是多大? 我文字提到的010001就是这个 我看资料只有3个字节?
mcxiaoabc 2012-02-25
  • 打赏
  • 举报
回复
[code=C#]
"
para.Exponent = Convert.FromBase64String("17")
para.Modulus = Convert.FromBase64String("xxxxxxx");
rsa.ImportParameters(para);

这样好像就要出错了 EXPONET 网站上提供的 想知道怎么拿过来直接用?
mcxiaoabc 2012-02-25
  • 打赏
  • 举报
回复
那个编码必须是BASE64的吗?
muyi66 2012-02-25
  • 打赏
  • 举报
回复
muyi66 2012-02-25
  • 打赏
  • 举报
回复
RSA加解密是对应的,用公钥加密的就要用私钥去解密,反之亦然。

公钥和私钥是成对的,在同一次生成。然后使用者保留自己的私钥,公开公钥。这样你想给拥有私钥者发密文时,只要用公钥进行加密就行了。然后只有私钥拥有者才能解开密文得到明文。
muyi66 2012-02-25
  • 打赏
  • 举报
回复
如果你想要了解RSA算法的原理,看别人的程序是看不明白的,你得去看介绍RSA加密算法的文章。维基百科上就有比较详细的介绍。

如果是打算了解RSA算法的流程,可以去网上搜索一下。我记得以前看到过不少详细讲解RSA加解密流程的文档。

如果只是想要源代码,CSDN上就有,去下载区搜一下就找到了。
加载更多回复(7)

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧