当前位置: 首页 > 算法相关, 编程技术 > 正文

C语言实现RSA加密解密

最近在分析一个程序的时候,发现程序大量的使用了次方和求模的操作,但是没有太在意,等到将汇编语言翻译成C语言后,发现程序的算法和RSA很相似

查询RSA的算法原理,发现程序真的是使用了RSA的算法,无奈自己的辛苦工作居然把RSA的汇编代码翻译了出来

也罢,就当是练手把,下面是我C语言的代码实现逆向分析出的RSA的算法,供大家参考:

#include <iostream>
using namespace std;

void fun1(double  ecx,double esi,double &eax,double &edx)
{
	eax=eax*ecx;
	edx=0;
	if(eax > 4294967295){
		for(int i =1;1==1;i++){
			eax=eax-4294967296;
			if(eax<=4294967295){

				break;
			}
		}
		edx=i;
	/*	edx = (int)eax / 4294967295;
		eax= ((int)eax%4294967295)-1;*/

	}

}

void fun2(double &eax,double &edx,double ebx,double ebp)
{
	eax=edx*4294967296+eax;
	while(eax>ebx){
		eax=eax-ebx;
		if(eax<=ebx){
			break;
		}
	}
	edx=0;
}
double  fun(double var1,double tmp,double len,double var2 )
{
	double ecx,ebp,edx,esi,ebx,eax;
	ecx =1,ebp=edx=tmp,eax = var1,esi=0,ebx=var2;

	for(double i = 0;i<len;i++){
		eax = var1;
		fun1(ecx,esi,eax,edx);
		fun2(eax,edx,ebx,ebp);
		ecx=eax;
		esi=edx;
	}
	return eax;
}
int main()
{
	double var1 = 0x4567; //m或者是c
	double tmp = 0;
	double len = 0X0B; //e或者是d
	double var2= 0XA7663; // n
	cout<<fun(var1,tmp,len,var2)<<endl;
	return 0;
}

其中var1表示的是明文或者是密文,当函数用于解密的时候,var1表示密文,用于加密时,var1表示明文

当用与解密时,len表示的是d,用于加密时,len表示e

函数fun就表示的是加密函数或者是解密函数,返回值表示的是加密后的内容或者是解密后的内容

如果有错误的话,还望指出,谢谢



本文固定链接: http://kuaile.in/archives/820 | 蒲公英的博客

该日志由 蒲公英 于2012年04月08日发表在 算法相关, 编程技术 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: C语言实现RSA加密解密 | 蒲公英的博客
关键字:

C语言实现RSA加密解密:等您坐沙发呢!

发表评论


You must enable javascript to see captcha here!

快捷键:Ctrl+Enter