php转delphi,将此php数字签名转换为Delphi

我想将这个php数字签名函数重写为Delphi代码.

function SaySig() {

$privKeyFilePath = "c:\temp\myrsakey.pem";

$data = "sign this string";

$fp = fopen($privKeyFilePath, "r");

$priv_key = fread($fp, 8192);

fclose($fp);

$privatekeyid = openssl_get_privatekey($priv_key);

openssl_sign($data, $signature, $privatekeyid, OPENSSL_ALGO_SHA1);

openssl_free_key($privatekeyid);

$sig = base64_encode($signature);

echo "
";

echo "Signature:".$sig."
";

}

我不关心使用哪个组件(lockbox,DelphiOpenSSL,Chilkat Crypt ActiveX等).我尝试了所有这些并没有成功;这让我觉得我做的事情从根本上是错误的.

我的密钥是这样生成的:

openssl req -x509 -nodes -days 365 -newkey rsa:1024 -sha1 -subj “/C=US/ST=CA/L=Mountain View/CN=www.mycompany.com” -keyout myrsakey.pem -out c:\temp\myrsacert.pem

密钥的内容(不用担心 – 我会生成一个新的):

—–BEGIN RSA PRIVATE KEY—–

MIICXgIBAAKBgQCqsR7s4X74LfTiLv1PP6Yn0SBpGBtbzkBSQ95E2b9Haa3Qtf0a

KjDJpZLMwXC/IrSP7K2Gxbl2cZotT19GVgw6PcYPTBBWX2gJoVrnQZP8uPdlGAgS

plODP55R9f4F0KzIpE6d+dpTGfJ1wysFqYN8fxtlu8K7YO/Mh8tNzN5VOQIDAQAB

AoGBAIvCvRyeQlU5Y+JzMSvbZNQDUrNabsRL67SwJ2VemVUCvbQ/3v62fv4M2VdY

KFYIN6oE08yfRw0pVWE2NT+lIxqSQx7+qv84Y7duqT7155wpCFj+a/6pYyNTFNFi

5wiTnN13eyHNgKxZm7QcMH67T/noTgz0LoT5p54ynmfNcjyBAkEA3DCEQ6Dm2xYH

Nhk3+7sNEVklN20zNqyYvrCunNLAiLioF1jDApdfcT8YtVd29L7tH1ZdJYG5DXJ8

Bs7eKLGekQJBAMZzy0Q7LZHdWQxSRi7wy0eq6SqZMqi0pb9VPuXjWG1y+rtRr1vV

vyMaGz4rcE7mkbq/Nkn+AQXc30GOj3GE8CkCQQCMDVwDfBN6pL8/fLjsJ+S+9RnD

8HRTwWKCX/UgkLif/fwEpZOcUVYGvSBlL9XdBJfkh9VFZwaidABJgEk0Tw3RAkBd

6pjMnpDvUeh9e0Y5mr0pGookHcIqsuspxEby9od3rI1aLsslU9+T1hwEbPxGarmW

vj0MAUgspR2G4deiqn4ZAkEAnWxV7NhtVPLs5Y2ZYeHz7ipdcSL4/keLW4PwKerF

7LJj4s7/6ZqnHA6Z0yhCcziflYQArWt1ViLMIYZ8grr5Kg==

—–END RSA PRIVATE KEY—–

输出看起来像这样:

jcIIsr145dTwDrT8g4jb2HZ5FP5UL6/9mK7hF6hC2lCZGlM0W4QqFqytghWaU0w3Z6JkMVUlxxWtQ2R+

vWQVB0F3htAtbVZkiA67x0zor+zmpClBIazmfVJlng4sG1R7CCUZ0gGhdm4JMc08VsWU25utudcG6inpl

whQiZgefW0=

看起来好像我要求某人“做我的工作”.但是我一直在努力争取一段时间没有成功.

谢谢.

有人要求我发布我的一些代码.以下是我尝试过的一些事情..

function TMainWeb.sign(mstring: String): string;

var

mPrivateKey: TLbRSAKey;

LbRSASSA1: TLbRSASSA;

begin

LbRSASSA1:= TLbRSASSA.create(nil);

LbRSASSA1.PrivateKey.LoadFromFile('C:\temp\myrsakey.der');

LbRSASSA1.HashMethod := TRSAHashMethod(hmSHA1);

LbRSASSA1.SignString(mString);

result := LbRSASSA1.Signature.IntStr;

end;

function TMainWeb.sign1(mstring: String): string;

var

LbDSA1: TLbDSA;

mPrivateKey: TLbRSAKey;

begin

mPrivateKey := TLbRSAKey.Create(aks1024);

mPrivateKey.LoadFromFile('C:\temp\myrsakey.der');

LbDSA1 := TLbDSA.create(application);

lbDSA1.PrivateKey.Assign(mPrivateKey);

LbDSA1.SignString(mString);

end;

function TMainWeb.Sign2(mString: String): string;

var

signer: TMessageSigner;

begin

signer := TMessageSigner.Create;

signer.LoadPrivateKey('C:\temp\myrsakey.pem');

signer.PlainMessage := mString;

signer.MIMESign;

result := signer.SignedMessage;

end;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值