VFP算法示例RSA

原创 2006年06月19日 08:06:00


*******************RSA算法示例************************

*公开密钥   n:两个素数p和q的乘积
*           e: 与(p-1)(q-1)互素
*
*私人密钥   d: e的负一次方((mod(p-1)(q-1)))
*加密       c=m的e次方 mod n
*解密       m=c的d次方 mod n
*注:只是一个小数运算,大数计算会产生错误

******************************************************
* p=47 q=71
* n=3337  (公钥)
* e=79    (公钥)

* d=1019  (私钥)

* m=688   (原始数据)
* c=1570  (加密后的数)
******************************************************
*例 p=47 q=71
*则 n=pq=3337
*
*加密密钥e与(p-1)(q-1)=46*70=3220没有公因子
*随机选取e,如79,那么
*     d=79的负一次方 mod 3220=1019
* 设要加密的数为 m=688
*
*加密  c=m的e次方 mod n
*        =688的79次方 mod 3337
*        =1570
*解密  m=c的d次方 mod n
*       =1570的1019次方 mod 3337
*       =688
*******************************************************
CLEAR
*?encrypt_decrypt1(688,79,3337)
aa=3330
?"加密前:",aa
xx=encrypt_decrypt2(aa,65537,68714299)
?"加密结果:",xx
?"还原:",encrypt_decrypt2(xx,48843233,68714299)


?encrypt_decrypt1(1570,1019,3337)
?
?encrypt_decrypt2(688,79,3337)
?encrypt_decrypt2(1570,1019,3337)

*这里设e=17,它与n是互为素数的,也就是常用的(3,17,65537(即2的16次方+1))几个值
*下面需要计算d,如上例中的:
* p=47 q=71
* n=3337  (公钥)
* e=79    (公钥)
*计算方法是(d * e ) mod ((p-1)(q-1)) 的余数为1
?Dekey(47,71,79)
*********************************************************
*下面这个两个函数都可以计算(m ^ e) mod n
********************************************************
*降价法
********************************************************
PROCEDURE encrypt_decrypt1
LPARAMETERS m, e, n
LOCAL a,b,c
a=m
b=e
c=1
do while b<>0
 IF b%2==0
  b = b / 2 &&降阶
  a = (a * a) % n
 ELSE
  b = b - 1
  c = (a * c) % n
 ENDIF
ENDDO    
RETURN  c
ENDPROC
**********************************************************
PROCEDURE encrypt_decrypt2
LPARAMETERS m,e,n
PRIVATE intFlag, intResult
    intResult = 1
    FOR intFlag = 1 TO e
        intResult = (intResult * m) % n
    ENDFOR
    RETURN intResult
ENDPROC
*********************************************************
*穷举分解质数
********************************************************
PROCEDURE DeCrypt
LPARAMETERS nNum
LOCAL nStr,nLen,nStart,nEnd,nReturn

nStr=STR(nNum,16) &&VFP中只能处理16位数
nLen=LEN(ALLTRIM(nStr)) &&取得公钥长度

*以下计算起始的质数 最大的质因数为素数的一半长度
nStart=INT(nLen/2)
IF MOD(nLen,2)<>0
 nStart=nStart+1
ENDIF
cStr=REPLICATE("9",nStart)
nEnd=VAL(REPLICATE("9",nStart-1))

FOR nReturn=VAL(cStr) to nEnd step -1
 IF MOD(nNum,nReturn)=0
 EXIT
 ENDIF
ENDFOR

RETURN nReturn
ENDPROC
************************************************
*穷举计算私钥d
*(d * e ) mod ((p-1)(q-1)) 的余数为1
***********************************************
PROCEDURE DeKey
LPARAMETERS p,q,e
LOCAL z,x
z=(p-1)*(q-1)

FOR x=1 to z
   IF (x*e)%z=1
 RETURN x
   ENDIF
ENDFOR

ENDPROC

RSA算法的简单认识nhe

关于RSA算法 因为接触不多 所以是对着别人的博客写的 但是自己也确实研究了很久 大致理解 望见谅...
  • MiaoMiaoDog
  • MiaoMiaoDog
  • 2016年06月20日 15:11
  • 135

VFP算法示例RSA

*******************RSA算法示例*************************公开密钥   n:两个素数p和q的乘积*           e: 与(p-1)(q-1)互素**...
  • ljyit
  • ljyit
  • 2006年06月19日 08:06
  • 1864

vfp示例表格

  • 2011年12月30日 22:00
  • 8KB
  • 下载

开发支付宝支付用DELPHI实现 RSA签名

近来根据业务需求 在ERP中集成了微信支付,支付宝支付,开发支付宝支付时最大的障碍就是RSA签名,找了很多资料,最终用 下了个libeay32.pas  根据网上资料最终解决了问题 funct...
  • star1010
  • star1010
  • 2015年08月20日 16:15
  • 9166

RSA-签名与验证

#include               #include               #include                             int    ma...
  • u010940949
  • u010940949
  • 2013年07月16日 15:15
  • 2493

VFP中身份证号码最后一位的校验码的算法

  • 2014年04月04日 21:17
  • 3KB
  • 下载

《算法图解》pdf

下载地址:网盘下载 内容简介  · · · · · · 本书示例丰富,图文并茂,以让人容易理解的方式阐释了算法,旨在帮助程序员在日常项目中更好地发挥算法的能...
  • cf406061841
  • cf406061841
  • 2017年05月27日 19:19
  • 5991

bmh算法

#include #include /* Returns a pointer to the first occurrence of "needle" * within "haysta...
  • fishmai
  • fishmai
  • 2016年08月31日 21:16
  • 340

简单的全排列算法实现

问题描述: 实现一个简单的全排列算法,以整形数组{1,2,3,4,5}为例,假设元素无重复。   问题分析: 如果用多层循环来实现,那么……有多少个元素将需要有多少层循环,这样作为实现一个算法...
  • mzlogin
  • mzlogin
  • 2011年11月20日 19:05
  • 846

【Bugly干货分享】手把手教你逆向分析 Android 程序

第一张图是在把代码注入到地图里面,启动首页的时候弹出个浮窗,下载网络的图片,苍老师你们不会不认识吧?第二张图是微信运动步数作弊,6不6? ok,那我们从头说起1.反编译Android 的反编译,相信...
  • Tencent_Bugly
  • Tencent_Bugly
  • 2016年05月16日 12:46
  • 21192
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VFP算法示例RSA
举报原因:
原因补充:

(最多只允许输入30个字)