首页
社区
课程
招聘
[求助]有RSA解密算法,求RSA加密算法
发表于: 2012-3-22 19:52 5672

[求助]有RSA解密算法,求RSA加密算法

2012-3-22 19:52
5672
今天参考别人的修改了一个RSA的解密算法,但是RSA的加密算法始终没写对.谁可以帮助我根据我写的 RSADecrypt  ,修改出正确的 RSAEncrypt  算法吗???
这个程序是DELPHI写的

以下是解密算法的过程.
Procedure RSADecrypt(E : String; Var exp, modb : TFGInt; Var D : String);
Var
    i, j, modbits: longint;
   EGInt, temp,temp1, temp2 : TFGInt;
   tempstr1, tempstr2, tempstr3 : String;
Begin
   FGIntToBase2String(modb, tempstr1);
   modbits := length(tempstr1);
   convertBase256to2(E, tempstr1);                                  //被加密数据转为2进制字符
   While copy(tempstr1, 1, 1) = '0' Do delete(tempstr1, 1, 1);      //循环删除tempstr1前的字符‘0’
   While (length(tempstr1) MOD (modbits * 2)) <> 0 Do tempstr1 := '0' + tempstr1;       //将删除‘0’后的tempstr1长度补齐为原始长度的整数乘2的倍(在字符前端加‘0’)
   j :=  length(tempstr1) DIV (modbits * 2) ;                       //tempstr1的长度除以 原始长度的两倍 = J
   tempstr2 := '';                                                  //清空 tempstr2
   For i := 1 To j Do                                               //以下循环 j 次                   // ******
   Begin
      tempstr3 := copy(tempstr1, 1, modbits);                       //将tempstr1字符中的 1 到modbits位复制到tempstr3
      While copy(tempstr3, 1, 1) = '0' Do delete(tempstr3, 1, 1);   //循环删除tempstr3 前面字符'0'
      If tempstr3 = '' Then exit;                                   //如果 tempstr3为空 跳出循环
      Base2StringToFGInt(tempstr3, EGInt);
      delete(tempstr1, 1, modbits);                                 //从tempstr1中删除1 到modbits位
      tempstr3 := copy(tempstr1, 1, modbits);                       //将tempstr1字符中的 1 到modbits位复制到tempstr3
      While copy(tempstr3, 1, 1) = '0' Do delete(tempstr3, 1, 1);   //循环删除tempstr3里的字符‘0’
      Base2StringToFGInt(tempstr3,temp);
      delete(tempstr1, 1, modbits);                                 //清空 tempstr1
      FGIntMontgomeryModExp(temp, exp, modb, temp1);
      FGIntDestroy(temp);                                           //清空 temp
      FGIntModInv(temp1, modb, temp);
      FGIntDestroy(temp1);                                          //清空 temp1
      FGIntMulMod(EGInt, temp, modb, temp2);
      FGIntDestroy(temp);                                           //清空 temp
      FGIntDestroy(EGInt);                                          //清空 EGInt
      tempstr3 := '';                                               //清空 tempstr3
      FGIntToBase2String(temp2, tempstr3);
      While (length(tempstr3) Mod (modbits - 1)) <> 0 Do tempstr3 := '0' + tempstr3;                  //在tempstr3的起始位补足‘0’直到tempstr3的长度为modbits-1的整数倍
      tempstr2 := tempstr2 + tempstr3;
      FGIntdestroy(temp2);                                          //清空 temp2
   End;                                                             //循环结束
   While (Not (copy(tempstr2, 1, 3) = '111')) And (length(tempstr2) > 3) Do delete(tempstr2, 1, 1);   //从tempstr2第一位开始删除字符,直到tempstr2的开头为'111',且tempstr2长度要大于3
   delete(tempstr2, 1, 3);                                          //删除tempstr2的前三位
   ConvertBase2To256(tempstr2, D);
End;

RSA.rar

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (2)
雪    币:
能力值: (RANK: )
在线值:
发帖
回帖
粉丝
2
RSA加解密的代码是一样的, 只是参数不同而已.
2012-3-28 20:03
0
雪    币: 71
活跃值: (286)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
问题已经解决.看来靠自己哦
2012-4-15 18:42
0
游客
登录 | 注册 方可回帖
返回
//