pRSA = ^RSA;
RSA = record
pad: integer;
version: integer;
meth: pRSA_METHOD;
n: pBIGNUM;
e: pBIGNUM;
d: pBIGNUM;
p: pBIGNUM;
q: pBIGNUM;
dmp1: pBIGNUM;
dmq1: pBIGNUM;
iqmp: pBIGNUM;
ex_data: CRYPTO_EX_DATA;
references: integer;
flags: integer;
_method_mod_n: pBN_MONT_CTX;
_method_mod_p: pBN_MONT_CTX;
_method_mod_q: pBN_MONT_CTX;
bignum_data: ^byte;
blinding: ^BN_BLINDING;
end;
#5楼 得分:0回复于:2011-10-10 14:19:05Delphi(Pascal) code pRSA = ^RSA; RSA = record pad: integer; version: integer; meth: pRSA_METHOD; n: pBIGNUM; e: pBIGNUM; d: pBIGNUM; p: pBIGNUM; q: pBIGNUM; dmp1: pBIGNUM; dmq1: pBIGNUM; iqmp: pBIGNUM; ex_data: CRYPTO_EX_DATA; references: integer; flags: integer; _method_mod_n: pBN_MONT_CTX; _method_mod_p: pBN_MONT_CTX; _method_mod_q: pBN_MONT_CTX; bignum_data: ^byte; blinding: ^BN_BLINDING; end;
Delphi(Pascal) codefunction RSA_new: pRSA; cdecl;external 'libeay32.dll';
procedure RSA_free(r: pRSA); cdecl;external 'libeay32.dll';
function RSA_new_method(method: pRSA_METHOD): pRSA; cdecl;external 'libeay32.dll';
function RSA_size(pkey: pRSA): integer; cdecl;external 'libeay32.dll';
function RSA_generate_key(bits: integer; exp: Cardinal; progress: TProgressCallbackFunction; cb_arg: pointer):pRSA; cdecl;external 'libeay32.dll';
function RSA_check_key(arg0: pRSA): integer; cdecl;external 'libeay32.dll';
function RSA_public_encrypt(flen: integer; from: PCharacter; _to: PCharacter; rsa: pRSA; padding: integer): integer; cdecl;external 'libeay32.dll';
function RSA_private_encrypt(flen: integer; from: PCharacter; _to: PCharacter; rsa: pRSA; padding: integer): integer; cdecl;external 'libeay32.dll';
function RSA_public_decrypt(flen: integer; from: PCharacter; _to: PCharacter; rsa: pRSA; padding: integer): integer; cdecl;external 'libeay32.dll';
function RSA_private_decrypt(flen: integer; from: PCharacter; _to: PCharacter; rsa: pRSA; padding: integer): integer; cdecl;external 'libeay32.dll';procedure Tfrmbc_bs_tcpnet.FormShow(Sender: TObject);
var
ss,skkbhN:string;
NN1,NN2,NN,EE,srandom:string;
Checkcode:string; s1,s2:Pointer;
command:string;
ssrandom,sCrsa:PCharacter;
prsaData:pRSA;
rn,ilen:Integer;
begin
//ss:=Cutblank_wanjun(showstr(data));
skkbhN:='9876543210123626';
DM1.DataModule1.Tado_SK_JKGLSJ.Close;
DM1.DataModule1.Tado_SK_JKGLSJ.SQL.Clear;
DM1.DataModule1.Tado_SK_JKGLSJ.SQL.Text:='select * from SK_JKGLSJ where SKKBH ='''+skkbhN+'''';
DM1.DataModule1.Tado_SK_JKGLSJ.Open;
if DM1.DataModule1.Tado_SK_JKGLSJ.RecordCount>0 then
begin
NN1:=DM1.DataModule1.Tado_SK_JKGLSJ.FieldByName('NN1').AsString;
NN2:=DM1.DataModule1.Tado_SK_JKGLSJ.FieldByName('NN2').AsString;
NN:=NN1+NN2;
EE:=DM1.DataModule1.Tado_SK_JKGLSJ.FieldByName('EE').AsString;
end;
ssrandom:='1234567890123456'; s1:=Pointer(hextostring(NN));
s2:=Pointer(hextostring(EE));
prsaData:=RSA_new;
prsaData.n:=BN_new();
prsaData.e:=BN_new();
prsaData.n:= BN_bin2bn(s1,128,prsaData.n);
prsaData.e:= BN_bin2bn(s2,4,prsaData.e); sCrsa:='';
ilen:=length(ssrandom);
rn:=RSA_public_encrypt(ilen,Pointer(ssrandom),Pointer(sCrsa),prsaData,RSA_PKCS1_PADDING);
if rn=-1 then
begin
command:=hextostring('0505');
end
else begin
Checkcode:=checksum(sCrsa,128);
command:=hextostring(sCrsa+Checkcode);
end;
showmessage(command);
BN_clear_free(prsaData.n);
BN_clear_free(prsaData.e);
RSA_free(prsaData);
end;
运行到rn:=RSA_public_encrypt(ilen,Pointer(ssrandom),Pointer(sCrsa),prsaData,RSA_PKCS1_PADDING);这里会提示错误:access violation at address 630a5adf in module 'libeay32.dll'.Read of address 00000004.
RSA = record
pad: integer;
version: integer;
meth: pRSA_METHOD;
n: pBIGNUM;
e: pBIGNUM;
d: pBIGNUM;
p: pBIGNUM;
q: pBIGNUM;
dmp1: pBIGNUM;
dmq1: pBIGNUM;
iqmp: pBIGNUM;
ex_data: CRYPTO_EX_DATA;
references: integer;
flags: integer;
_method_mod_n: pBN_MONT_CTX;
_method_mod_p: pBN_MONT_CTX;
_method_mod_q: pBN_MONT_CTX;
bignum_data: ^byte;
blinding: ^BN_BLINDING;
end;
#5楼 得分:0回复于:2011-10-10 14:19:05Delphi(Pascal) code pRSA = ^RSA; RSA = record pad: integer; version: integer; meth: pRSA_METHOD; n: pBIGNUM; e: pBIGNUM; d: pBIGNUM; p: pBIGNUM; q: pBIGNUM; dmp1: pBIGNUM; dmq1: pBIGNUM; iqmp: pBIGNUM; ex_data: CRYPTO_EX_DATA; references: integer; flags: integer; _method_mod_n: pBN_MONT_CTX; _method_mod_p: pBN_MONT_CTX; _method_mod_q: pBN_MONT_CTX; bignum_data: ^byte; blinding: ^BN_BLINDING; end;
Delphi(Pascal) codefunction RSA_new: pRSA; cdecl;external 'libeay32.dll';
procedure RSA_free(r: pRSA); cdecl;external 'libeay32.dll';
function RSA_new_method(method: pRSA_METHOD): pRSA; cdecl;external 'libeay32.dll';
function RSA_size(pkey: pRSA): integer; cdecl;external 'libeay32.dll';
function RSA_generate_key(bits: integer; exp: Cardinal; progress: TProgressCallbackFunction; cb_arg: pointer):pRSA; cdecl;external 'libeay32.dll';
function RSA_check_key(arg0: pRSA): integer; cdecl;external 'libeay32.dll';
function RSA_public_encrypt(flen: integer; from: PCharacter; _to: PCharacter; rsa: pRSA; padding: integer): integer; cdecl;external 'libeay32.dll';
function RSA_private_encrypt(flen: integer; from: PCharacter; _to: PCharacter; rsa: pRSA; padding: integer): integer; cdecl;external 'libeay32.dll';
function RSA_public_decrypt(flen: integer; from: PCharacter; _to: PCharacter; rsa: pRSA; padding: integer): integer; cdecl;external 'libeay32.dll';
function RSA_private_decrypt(flen: integer; from: PCharacter; _to: PCharacter; rsa: pRSA; padding: integer): integer; cdecl;external 'libeay32.dll';procedure Tfrmbc_bs_tcpnet.FormShow(Sender: TObject);
var
ss,skkbhN:string;
NN1,NN2,NN,EE,srandom:string;
Checkcode:string; s1,s2:Pointer;
command:string;
ssrandom,sCrsa:PCharacter;
prsaData:pRSA;
rn,ilen:Integer;
begin
//ss:=Cutblank_wanjun(showstr(data));
skkbhN:='9876543210123626';
DM1.DataModule1.Tado_SK_JKGLSJ.Close;
DM1.DataModule1.Tado_SK_JKGLSJ.SQL.Clear;
DM1.DataModule1.Tado_SK_JKGLSJ.SQL.Text:='select * from SK_JKGLSJ where SKKBH ='''+skkbhN+'''';
DM1.DataModule1.Tado_SK_JKGLSJ.Open;
if DM1.DataModule1.Tado_SK_JKGLSJ.RecordCount>0 then
begin
NN1:=DM1.DataModule1.Tado_SK_JKGLSJ.FieldByName('NN1').AsString;
NN2:=DM1.DataModule1.Tado_SK_JKGLSJ.FieldByName('NN2').AsString;
NN:=NN1+NN2;
EE:=DM1.DataModule1.Tado_SK_JKGLSJ.FieldByName('EE').AsString;
end;
ssrandom:='1234567890123456'; s1:=Pointer(hextostring(NN));
s2:=Pointer(hextostring(EE));
prsaData:=RSA_new;
prsaData.n:=BN_new();
prsaData.e:=BN_new();
prsaData.n:= BN_bin2bn(s1,128,prsaData.n);
prsaData.e:= BN_bin2bn(s2,4,prsaData.e); sCrsa:='';
ilen:=length(ssrandom);
rn:=RSA_public_encrypt(ilen,Pointer(ssrandom),Pointer(sCrsa),prsaData,RSA_PKCS1_PADDING);
if rn=-1 then
begin
command:=hextostring('0505');
end
else begin
Checkcode:=checksum(sCrsa,128);
command:=hextostring(sCrsa+Checkcode);
end;
showmessage(command);
BN_clear_free(prsaData.n);
BN_clear_free(prsaData.e);
RSA_free(prsaData);
end;
运行到rn:=RSA_public_encrypt(ilen,Pointer(ssrandom),Pointer(sCrsa),prsaData,RSA_PKCS1_PADDING);这里会提示错误:access violation at address 630a5adf in module 'libeay32.dll'.Read of address 00000004.
解决方案 »
- 在程序中我用 WinExec 启动了另一个程序,怎样判断该程序什么时候结束!
- 我是利用TQuery组件通过设置SQL语言对数据库的数据查询和统计等等,我要写一篇课程设计报告,谁能帮帮我吗?
- 安装IntraWeb v6.0.11 后,程序运行提示:"IWInitStandAlone.dcu"找不到,怎么办呀?
- 关于ClientDataset的简单问题
- 急!急!急!
- xp(32位)、xp(64位)、win7(64位)到底用那个?
- 取字体高度
- 请帮忙,报表线的问题,,
- 请教各位大虾了:如何备份数据库?
- 如何将一张图片保存到数据库
- 我的工程里有很多窗体,我想查询某个关键字在哪个窗体单元代码中,怎么写代码
- delphi动态定义数组,赋值报错。
改用pchar但要申请内存,简单的方法,用静态数组
改所有string为array [0..xxx] of char
xxx为你要分配的内存大小
变量调用时用
@变量名