.net平台的RSA实现以及与Delphi之间的互操作性
.net平台下面的RSA算法实现是RSACryptoServiceProvider,如果安装了 Microsoft Enhanced Cryptographic Provider,则 RSACryptoServiceProvider 支持长度从 384 位至 16384 位(增量为 8 位)的密钥。如果安装了 Microsoft Base Cryptographic Provider,则支持长度从 384 位至 512 位(增量为 8 位)的密钥。
目前该算法支持的填充Padding算法为PKCS#1 1.5和OAEPPadding,而签名算法目前仅支持SHA1withRSA算法,其他的好像没有提供,或许需要安装其他provider,目前第三方的provider可以使用Bouncy Castle的C#实现http://www.bouncycastle.org/csharp/,使用Bouncy Castle的包可以实现
RIPEMD128、RIPEMD160、RIPEMD256、SHA-1、SHA-224、SHA-256、SHA-384、SHA-512、MD2,MD4,MD5等HASH算法与RSA的集成签名算法。
为了更好的处理BigInteger运算的问题,在本文中用到了http://www.codeproject.com/csharp/biginteger.asp提供的BigInteger.cs用来处理大数运算的问题,用来验证的DLL实用delphi实现的,当然也可以用java来验证,效果相同,该DLL的代码在下面专题中作详细讲解。
具体源代码如下:

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

运行结果如下:
d:\>rsatest hello加密 sha1 1.明文:hello加密 2.RSA加密:A/0ZWckK9C6JyTk8NmwESVSI/N8OyQ7nYBEK8cpzo30nHj+Pb0WfvQ+lFa38Xk3cd+d8ueysTSc7tqr4Wjk831d0MexAC2yJ4SkqLWfKnhuU0OxF6d4s8UpegvuMBy1KWpzovbFGa3HUGRmMVbu4GqPDdzkvFmfWzGArXXiDpVw= 3.RSA解密:hello加密 4.对明文采用sha1withRSA的签名算法,签名数据为: 5.RSA验证签名:true 6.采用HASH算法sha1计算明文的结果:C3F118FF24E166AC977EC9C3D69A5AF8B7C78F8B =========.net RSACryptoServiceProvider调用RSA测试========= 1.明文:hello加密 2.publicKey加密后的数据:NrW/Uwjd72SduBgQkOFjjtEibTX/+WOCV0/oIFMiEln5uhLZ5OaH6cyWPEXBEwjZIiUY78dmdk8BW6SmiDArNwFePf/tM7KCAcSU9Zz3PGl07ZDmvT1P8F24caKaX9+fGwy72mOtoBhFnKh18oOjq4wZ06e1g8IQQQco9W+kHgU= 3.privateKey解密后的数据:hello加密 4.对明文采用sha1withRSA的签名算法,签名数据为: 5.RSA验证签名:True 6.采用HASH算法sha1计算明文的结果:C3F118FF24E166AC977EC9C3D69A5AF8B7C78F8B hello加密 System.Text.DBCSCodePageEncoding =====================跨语言平台调用RSA测试===================== 1.明文:hello加密 2.DLL RSA加密:P/AP7Iwv7pYxh+T1a/PZ4UBCZABu7zPpNt65W5ncNfo8eVQbH8jlH/Jv+fGa0x4CCmRUaTA0O1HeO4LowRpFyPJkwLxQAsMedvfRcQ7Ro2Hggoz5uwRG6QZ2go0Io0KAOGhcV4efKHFG2xro4jYX2O2hWyHTeMldDQPxt98z2co= 3.RSACryptoServiceProvider RSA解密:hello加密 4.DLL 对明文采用sha1withRSA的签名算法,签名数据为: 5.RSACryptoServiceProvider RSA验证签名:True |
有关程序下载:
http://files.cnblogs.com/midea0978/rsa.net.rar
附注:对于这个RSA的跨平台技术,已经是07年研究的结果,后来就没怎么深入了,目前本人已经在一个项目中使用这方面该技术,应用在delphi,powerbuilder,J2EE复合环境中。对于这方面的详细源代码或者技术支持感兴趣的话,如能提供一定报酬的基础上,可使用站内消息联系博主转让!
当然如果免费使用的话,附件中的cmipcrypt.dll是没有任何限制,随便使用。
.net平台的RSA实现以及与Delphi之间的互操作性的更多相关文章
- 支付宝开放平台 配置RSA(SHA1)密钥 OpenSSL配置公钥私钥对
进入到第一次配置支付宝支付服务了 配置支付宝服务,需要去支付宝的开放平台申请服务 需要设置一些参数 其中需要在后台设置配置RSA(SHA1)密钥(公钥(注意这个子读"yao")) ...
- BUUCTF平台:RSA
RSA import gmpy2 def Decrypt(c,e,p,q): L=(p-1)*(q-1) d=gmpy2.invert(e,L) n=p*q m=gmpy2.powmod(c,d,n) ...
- php 、asp、 java、 c#、 delphi之间的语言对照
PHP是一种跨平台的server端的嵌入式脚本语言.它大量地借用C,Java和Perl语言的语法, 并耦合PHP自己的特性,使WEB开发人员能够高速地写出动态产生页面. 它支持眼下绝大多数数据库. 另 ...
- RSA密钥,JAVA与.NET之间转换
最近在做银联的一个接口,用到RSA签名,悲剧来了,.net用的RSA密钥格式和JAVA用的不一样 .net为XML格式 <RSAKeyValue><Modulus>53Knuj ...
- 利用消息机制实现VC与Delphi之间的通讯(发送自定义消息)
摘要: 本文介绍了使用Windows消息机制实现由不同语言编制的程序之间的相互通讯.联系,并以当前较为流行的两种语言Microsoft Visual C++ 6.0和Borland delphi 5. ...
- 支付宝RSA签名之Delphi实现
Delphi有个很大的问题就是,厂商的不作为(没有封装标准的Cipher类库),让大家自己造轮子. 今天的轮子就是RSA签名,由于Delphi没有封装Cipher类库,所以只的自己写了. 因为要在Fi ...
- Delphi RSA加解密【 (RSA公钥加密,私钥解密)、(RSA私钥加密,公钥解密)、MD5加密、SHA加密】
作者QQ:(648437169) 点击下载➨delphi RSA加解密 [Delphi RSA加解密]支持 (RSA公钥加密,私钥解密).(RSA私钥加密,公钥解密).MD5加密.SHA1加密.SHA ...
- DELPHI支付宝支付代码
真实业务场景的考虑 按照支付宝或者微信支付的开发手册的说法,一个标准的客户端接入支付业务模型应该是这样的,我忽略时序图,只用文字描述: 用户登录客户端,选择商品,然后点击客户端支付. 客户端收集商品信 ...
- 教程-Delphi第三方控件安装卸载指南
1 只有一个DCU文件的组件.DCU文件是编译好的单元文件,这样的组件是作者不想把源码公布.一般来说,作者必须说明此组件适合Delphi的哪种版本,如果版本不对,在安装时就会出现错误.也正是因为没有源 ...
随机推荐
- 重装系统后删除Cygwin文件夹
1.右键点要删除Cygwin 文件夹,依次选属性-安全-高级-所有者-编辑,将所有者改为你的登录帐户,勾选下方“替换子容器和对象的所有者”. 2.在 属性-安全-高级对话框中选 权限选项卡,点更改权限 ...
- LeetCode OJ Symmetric Tree 判断是否为对称树(AC代码)
思路: 主要判断左子树与右子树. 在判断左时,循环下去肯定会到达叶子结点中最左边的结点与最右边的结点比较. 到了这一步因为他们都没有左(右)子树了,所以得开始判断这两个结点的右(左)子树了. 当某 ...
- UI学习笔记---第六天
UIControl及其子类 UISegmentedControl的用法 UISegmentedControl是iOS中得分段控件,每个segment都能被点击,相当于集成了若干个button.通常我们 ...
- 2016 ACM/ICPC Asia Regional Dalian Online 1002/HDU 5869
Different GCD Subarray Query Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K ( ...
- Open经验库网址
http://www.open-open.com/lib/view/open1436094840774.html
- linux文件系统---10
进入 Linux 根目录(即“/”, Linux 文件系统的入口, 也是处于最高一级的目录),运行“ls –l”命令,可以看到 Linux 系统包含以下目录. 1./bin 包含基本命令,如 ls.c ...
- leetcode 94 Binary Tree Inorder Traversal ----- java
Given a binary tree, return the inorder traversal of its nodes' values. For example:Given binary tre ...
- 奇怪的电梯(HDU1548) (Dijkstra)或者(BFS)
问题 E: 奇怪的电梯 时间限制: 1 Sec 内存限制: 64 MB提交: 35 解决: 16[提交][状态][讨论版] 题目描述 有一天桐桐做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都 ...
- android中ImageView讲解
1.看布局文 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns ...
- hihoCoder #1078 : 线段树的区间修改
题目大意及分析: 线段树成段更新裸题. 代码如下: # include<iostream> # include<cstdio> # include<cstring> ...