使用私钥对PHP进行数字登录,并在C#中进行验证
作者:互联网
我正在开发一项功能,该功能需要我在PHP中对短字符串进行数字签名,并在C#中验证字符串的签名.
我真的很想在PHP中使用openssl_sign,因为它很简单,但是我在Google上可以找到的所有信息都表明这是行不通的.
有some external libraries声称可以做到这一点,但是由于这是一个业余项目,我宁愿不购买这样的图书馆.
那么,这里有哪些替代方案? C#和PHP之间需要完全的互操作性.可以使用OpenSSL以外的库.
解决方法:
我使用Bouncy Castle Crypto APIs做过非常类似的事情.默认情况下,PHP openssl_sign使用SHA1.如果您使用的不是默认值,则需要更改GetSigner的算法参数.
string base64pubkey = "<!-- BASE64 representation of your pubkey from open ssl -->";
RsaKeyParameters pubKey = PublicKeyFactory.CreateKey(Convert.FromBase64String(base64pubkey)) as RsaKeyParameters;
byte[] signature = Convert.FromBase64String("<!-- BASE64 representation of your sig -->");
byte[] message = Encoding.ASCII.GetBytes("Something that has been signed");
ISigner sig = SignerUtilities.GetSigner("SHA1WithRSAEncryption");
sig.Init(false, pubKey);
sig.BlockUpdate(message, 0, message.Length);
if (sig.VerifySignature(signature))
{
Console.WriteLine("all good!");
}
标签:openssl,digital-signature,c,php 来源: https://codeday.me/bug/20191210/2103084.html