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+AES加解密算法程序示例

  • 2015年11月11日 18:03
  • 750KB
  • 下载

openssl rsa 算法示例源码

  • 2017年09月21日 20:41
  • 15.25MB
  • 下载

RSA算法加解密示例

RSA加密与解密 RSA算法的密钥由公钥和私钥组成,公钥用于加密,私钥用于解密。顾名思义,公钥就是可以进行公开的密钥,一般可以公开给你的合作伙伴;私钥就是私有的,也就是只有你知道的,...

openssl中的rsa等算法的使用示例

  • 2015年12月11日 13:28
  • 10KB
  • 下载

RSA加密算法及代码示例

以下代码使用PowerBuilder作为示例 1、数据加密概述 早在几千年前人类就已经有了通信保密的思想和方法。但直到1949年,信息论创始人香农发表著名文章,论证了一般经典加密方法得到的密文...

C#版非对称算法RSA简单代码示例

//界面控件namespace RSA算法 { partial class Form1 { /// /// 必需的设计器变量。 ///...
  • bjtbjt
  • bjtbjt
  • 2013年11月23日 18:51
  • 3317

VFP换肤示例源码

  • 2016年04月24日 21:26
  • 1.85MB
  • 下载

使用RSA进行信息加密解密的WebService示例

使用RSA进行信息加密解密的WebService示例 按:以下文字涉及RSA对WebService传递的数据的加密解密,如果您已经熟知RSA或是有其它更好的方法请不要往下看以免浪费时间. ...

RSA加密解密示例工程

  • 2017年05月25日 19:29
  • 16.56MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VFP算法示例RSA
举报原因:
原因补充:

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