MD5withRSA 数字签名 (delphi)
建行采用的签名算法是MD5withRSA,这个算法其实是两个算法的叠加:MD5算法和RSA算法。MD5算法是不可逆的,RSA算法是非对称加密算法。关于RSA算法我就大概的说一下吧,要用RSA算法加密数据,首先需要产生一个密钥对,就是公钥和私钥。
在 D7_270081366@163.com 密码:delphi
里有 《RSA加密算法.rar》,其中有两个版本的,
其中有一个是要求输入"模数",请问这是怎么回事?
有没有直接输入 明文、密钥 就可以得出密文的啊?
[解决办法]
加密解密存在两种算法,对称加密和非对称加密.
加密的实质就是数学运算.
对于对称加密,存在一个KEY,所以,对称算法都是可逆的.逆运算就可以得到原文.
非对称加密分为可逆和不可逆,例如,MD5是不可逆的.其实不是说不可逆运算,只是逆运算后,源结果有无穷个.
RSA是可逆的.它是由公钥/私钥组成.公钥加密后,只有配套私钥能解.
例子:
A与B通信
A生成密钥公钥A/私钥A.
B生成密钥公钥B/私钥B.
A通过网络之类把公钥A发送给B,反之亦然.
以后,A发送给B的数据,先用公钥B加密,加密后,只有B能解开,因为只有他拥有私钥B.反之亦然.
中间人欺骗:
假设C位于A与B之间,那么A发送公钥A给B的时候,C拦截下来,把公钥C发给B.反之亦然.
然后,A发送数据,用公钥C加密,C接收后,用私钥C解密.然后再用公钥B加密后发送给B.反之亦然.
所以你明白为什么要有个MD5了吧.
另外,对称算法速度快,但可逆;非对称速度慢.所以一般地说,还是用对称算法加密,只是KEY先用非对称交换.
都是些常识性的东西,楼主先找些资料看看再说吧.
[解决办法]
今天坛子里讨论md5的帖子太多了,随便搜一下就一堆,帮你转一个
uses
IdHashMessageDigest, IdHash, IdGlobal;
type
TMD5 = class(TIdHashMessageDigest5);
function StrToMD5(S: String): String; overload;
function StrToMD516(S: String; L: integer): String; overload; //返加16位MD5值
function StrToMD532(S: String; L: integer): String; overload; //返回32位MD5值
implementation
function StrToMD5(S: String): String;
var
Md5Encode: TMD5;
begin
Md5Encode:= TMD5.Create;
result:= Md5Encode.AsHex(Md5Encode.HashValue(S));
Md5Encode.Free;
end;
function StrToMD516(S: String; L: integer): String;
begin
result:= copy(StrToMD5(S),9,L);
end;
function StrToMD532(S: String; L: integer): String; overload;
begin
result:= copy(StrToMD5(S),1,L);
end;
end.
[解决办法]
"模数"是rsa密钥里的一个重要组成
[解决办法]
既然知道了,就没必要再回答你了.
[解决办法]
必须得到RSA的公钥