我有一个以字符串形式存储在数据库中的公钥.生成库表示它是RSA 2048公钥.以下是存储的公钥的示例:
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmHPAou1FpNAoLwF/mL0rei8QcC+LvKIYteEHOpxGibI6PNQ8kSpB7WNPJT2wM+B0+DT04L5LBi78PSo1UQO3umYEhHbAsKuNBV3CR8NGfUsWzSkgIzkbTCsELWkJT50foBT4YmBKEe6W8Ai2+3yzvMtic8RtBel73zS3dIdUUGaf7SMPtva+XDZTozRNiyligPh0nDgHcj6OQAtCxfTogLKukwaEPyWA06nQ68pMsxzzHqUZl5HJuDJRphAtOc2ZRFXZ1xaxVMO2D7UnkFA5q00UBW/i+KzkhgtNkLI8j2jiBim3IozRwpjQJvFsKoi29WDWPXcgtTU6k9kSmJBIqQIDAQAB
个
我有一个由同一个库生成的数据字符串和签名.根据文档,该签名是RSA PKCS#1v1.5 SHA 256签名.
数据字符串:
{"username":"user@example.com","requestTime":"1679669234"}
个
签署:
PiXcXFykgtOZY+tpmmXqt39VHwURd5NSIGL0U+TEj+qS6QwIT4Eh4W3fKYfIXwZGDu6Rdsu2PQxqBMhEQe7H7C0nq6ssih74MLavxpLuGPxmlZJ/EN2/m2fhLweerjS6U1uMIDcKE6cZgSD6z+KfkuWnKssM5yuMEkdztL5ef0Ay6Il0jXGayp+tLMGxGZaJLv31PRmYoK3c68buGphKV0hnj2y6+rKsoPfn+sVDxInH40oNcxF2zU+Y3ed9pW+/VOpnkTE9MoSNthNvwjNpRFJr4Awx7mKmOGe3dvC3yZ+iZ/lT892pTSwqo1O2mtXskbsUe1+xEfrzbi1/0ejy/g==
个
我一直在try 使用openssl_verify
来验证此签名,但甚至无法使用openssl_pkey_get_public
成功地解析公钥.我try 了以下几种不同的版本:
$publickey = "-----BEGIN RSA PUBLIC KEY-----\n".$publickey."\n-----END RSA PUBLIC KEY-----";
$pkey = openssl_pkey_get_public($publickey);
我已经try 了-----BEGIN RSA PUBLIC KEY-----
和-----BEGIN PUBLIC KEY-----
的不同版本,不过我相信RSA版本是正确的.在转到openssl_pkey_get_public
之前,我也try 过使用chunk_split($publickey, 64, "\n")
来拆分行.
每次try 后,openssl_error_string()
将返回以下内容:
error:0909006C:PEM routines:get_name:no start line
个
我不明白为什么会是这样.有谁能帮我验证这个签名吗?
虽然我希望避免额外的PHP库,但如果我必须安装一个PHP库,比如phpseclib,我会这样做的.