如何在 PHP 上使用 openssl 使用 SHA256 解密 RSA OAEP

沙伊夫丁·祖赫里

我尝试在 php 上使用 opensll 解密。所需的算法是带有 sha256 的 rsa-oaep。我需要为 $cipher_algo 写什么?

$key = 'examplekey';
$secret = 'examplesecret';
$cipher_algo = '';

$out = openssl_decrypt(base64_decode($secret), $cipher_algo, $key, OPENSSL_RAW_DATA);

或者一些可以在php上使用的lib加密和解密

迈克尔·费尔

您需要库https://phpseclib.com/才能运行以下代码(我使用的是版本 3)。

请注意,代码中没有异常处理

这是一个输出:

RSA 2048 encryption OAEP SHA-256 string
plaintext: The quick brown fox jumps over the lazy dog

* * * encrypt the plaintext with the RSA public key * * *
ciphertextBase64: p1SRx16ieLkDOu0SzFblU0WYSVNmspyJW57KG/fXoqvdqQGtO3qKXxPKIe24XBP4I+APx4pdvt3Ye/qVDMxokSzbLLPKplPs6P9NKoyJnrliIK8qUeP921d9G+x2XcRTmQgyCEaukp8sJuqC4gfaBe+houD8AG3jA4h2fBaBepZa9ZYwsMp4UWifCxvb5oWFst5rG3yMNNlg4hH+pFuv3iBT8qYqyznKGFrFRcrQ/KFGrYUtQ62+ak6NKAC0MJCl7AsERFtSW3Zfd/X1hRJun4Wgu/IEjeVw0nX5U78zo4eim7sXkGySFp8YLaH8+bu3rkGI0QT6u3R1NBc20lWjEw==

* * * decrypt the ciphertext with the RSA private key * * *
ciphertextReceivedBase64: p1SRx16ieLkDOu0SzFblU0WYSVNmspyJW57KG/fXoqvdqQGtO3qKXxPKIe24XBP4I+APx4pdvt3Ye/qVDMxokSzbLLPKplPs6P9NKoyJnrliIK8qUeP921d9G+x2XcRTmQgyCEaukp8sJuqC4gfaBe+houD8AG3jA4h2fBaBepZa9ZYwsMp4UWifCxvb5oWFst5rG3yMNNlg4hH+pFuv3iBT8qYqyznKGFrFRcrQ/KFGrYUtQ62+ak6NKAC0MJCl7AsERFtSW3Zfd/X1hRJun4Wgu/IEjeVw0nX5U78zo4eim7sXkGySFp8YLaH8+bu3rkGI0QT6u3R1NBc20lWjEw==
decryptedtext: The quick brown fox jumps over the lazy dog

代码:

<?php
include 'vendor/autoload.php';
// uses phpseclib version 3
use phpseclib3\Crypt\PublicKeyLoader;

function rsaEncryptionOaepSha256($publicKey, $plaintext) {
    $rsa = PublicKeyLoader::load($publicKey)
        ->withHash('sha256')
        ->withMGFHash('sha256');
    return $rsa->encrypt($plaintext);
}

function rsaDecryptionOaepSha256($privateKey, $ciphertext) {
    $rsa = PublicKeyLoader::load($privateKey)
        ->withHash('sha256')
        ->withMGFHash('sha256');
    return $rsa->decrypt($ciphertext);
}

function base64Encoding($input) {return base64_encode($input);}
function base64Decoding($input){return base64_decode($input);}

function loadRsaPrivateKeyPem() {
    // this is a sample key - don't worry !
    return '
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDwSZYlRn86zPi9
e1RTZL7QzgE/36zjbeCMyOhf6o/WIKeVxFwVbG2FAY3YJZIxnBH+9j1XS6f+ewjG
FlJY4f2IrOpS1kPiO3fmOo5N4nc8JKvjwmKtUM0t63uFFPfs69+7mKJ4w3tk2mSN
4gb8J9P9BCXtH6Q78SdOYvdCMspA1X8eERsdLb/jjHs8+gepKqQ6+XwZbSq0vf2B
MtaAB7zTX/Dk+ZxDfwIobShPaB0mYmojE2YAQeRq1gYdwwO1dEGk6E5J2toWPpKY
/IcSYsGKyFqrsmbw0880r1BwRDer4RFrkzp4zvY+kX3eDanlyMqDLPN+ghXT1lv8
snZpbaBDAgMBAAECggEBAIVxmHzjBc11/73bPB2EGaSEg5UhdzZm0wncmZCLB453
XBqEjk8nhDsVfdzIIMSEVEowHijYz1c4pMq9osXR26eHwCp47AI73H5zjowadPVl
uEAot/xgn1IdMN/boURmSj44qiI/DcwYrTdOi2qGA+jD4PwrUl4nsxiJRZ/x7PjL
hMzRbvDxQ4/Q4ThYXwoEGiIBBK/iB3Z5eR7lFa8E5yAaxM2QP9PENBr/OqkGXLWV
qA/YTxs3gAvkUjMhlScOi7PMwRX9HsrAeLKbLuC1KJv1p2THUtZbOHqrAF/uwHaj
ygUblFaa/BTckTN7PKSVIhp7OihbD04bSRrh+nOilcECgYEA/8atV5DmNxFrxF1P
ODDjdJPNb9pzNrDF03TiFBZWS4Q+2JazyLGjZzhg5Vv9RJ7VcIjPAbMy2Cy5BUff
EFE+8ryKVWfdpPxpPYOwHCJSw4Bqqdj0Pmp/xw928ebrnUoCzdkUqYYpRWx0T7YV
RoA9RiBfQiVHhuJBSDPYJPoP34kCgYEA8H9wLE5L8raUn4NYYRuUVMa+1k4Q1N3X
Bixm5cccc/Ja4LVvrnWqmFOmfFgpVd8BcTGaPSsqfA4j/oEQp7tmjZqggVFqiM2m
J2YEv18cY/5kiDUVYR7VWSkpqVOkgiX3lK3UkIngnVMGGFnoIBlfBFF9uo02rZpC
5o5zebaDImsCgYAE9d5wv0+nq7/STBj4NwKCRUeLrsnjOqRriG3GA/TifAsX+jw8
XS2VF+PRLuqHhSkQiKazGr2Wsa9Y6d7qmxjEbmGkbGJBC+AioEYvFX9TaU8oQhvi
hgA6ZRNid58EKuZJBbe/3ek4/nR3A0oAVwZZMNGIH972P7cSZmb/uJXMOQKBgQCs
FaQAL+4sN/TUxrkAkylqF+QJmEZ26l2nrzHZjMWROYNJcsn8/XkaEhD4vGSnazCu
/B0vU6nMppmezF9Mhc112YSrw8QFK5GOc3NGNBoueqMYy1MG8Xcbm1aSMKVv8xba
rh+BZQbxy6x61CpCfaT9hAoA6HaNdeoU6y05lBz1DQKBgAbYiIk56QZHeoZKiZxy
4eicQS0sVKKRb24ZUd+04cNSTfeIuuXZrYJ48Jbr0fzjIM3EfHvLgh9rAZ+aHe/L
84Ig17KiExe+qyYHjut/SC0wODDtzM/jtrpqyYa5JoEpPIaUSgPuTH/WhO3cDsx6
3PIW4/CddNs8mCSBOqTnoaxh
-----END PRIVATE KEY-----
';
}

function loadRsaPublicKeyPem() {
    // this is a sample key - don't worry !
    return '
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8EmWJUZ/Osz4vXtUU2S+
0M4BP9+s423gjMjoX+qP1iCnlcRcFWxthQGN2CWSMZwR/vY9V0un/nsIxhZSWOH9
iKzqUtZD4jt35jqOTeJ3PCSr48JirVDNLet7hRT37Ovfu5iieMN7ZNpkjeIG/CfT
/QQl7R+kO/EnTmL3QjLKQNV/HhEbHS2/44x7PPoHqSqkOvl8GW0qtL39gTLWgAe8
01/w5PmcQ38CKG0oT2gdJmJqIxNmAEHkatYGHcMDtXRBpOhOSdraFj6SmPyHEmLB
ishaq7Jm8NPPNK9QcEQ3q+ERa5M6eM72PpF93g2p5cjKgyzzfoIV09Zb/LJ2aW2g
QwIDAQAB
-----END PUBLIC KEY-----
';
}

echo 'RSA 2048 encryption OAEP SHA-256 string' . PHP_EOL;
$dataToEncryptString = "The quick brown fox jumps over the lazy dog";
echo 'plaintext: ' . $dataToEncryptString . PHP_EOL;

// # # # usually we would load the private and public key from a file or keystore # # #
// # # # here we use hardcoded keys for demonstration - don't do this in real programs # # #

// encryption
echo PHP_EOL . '* * * encrypt the plaintext with the RSA public key * * *' .PHP_EOL;
$ciphertextBase64 = base64Encoding(rsaEncryptionOaepSha256(loadRsaPublicKeyPem(), $dataToEncryptString));
echo 'ciphertextBase64: ' . $ciphertextBase64 . PHP_EOL;

// transport the encrypted data to recipient

// receiving the encrypted data, decryption
echo PHP_EOL . '* * * decrypt the ciphertext with the RSA private key * * *' .PHP_EOL;
$ciphertextReceivedBase64 = $ciphertextBase64;
echo 'ciphertextReceivedBase64: ' . $ciphertextReceivedBase64 . PHP_EOL;
$decryptedtext = rsaDecryptionOaepSha256(loadRsaPrivateKeyPem(), base64Decoding($ciphertextReceivedBase64));
echo 'decryptedtext: ' . $decryptedtext . PHP_EOL;
?>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Crypto ++中使用RSA OAEP SHA-256加密/解密数据

如何使用SunMSCAPI密钥解密RSA-OAEP

使用SHA256摘要进行OpenSSL RSA签名

使用RSA OAEP加密和解密

openSSL如何使用SHA256签署证书

如何使用 pyopenssl 解密 RSA 加密文件(通过 PHP 和 OpenSSL)?

如果只有公钥,如何使用RSA / OAEP进行加密/解密

如何在OpenSSL中使用p-256和SHA256获得ECSDA?

openssl / RSA-使用公钥解密

使用 openssl 进行 phpseclib RSA 解密

使用OpenSSL rsa密钥解密时出错

使用RSA-OAEP解密用JavaScript加密的C#中的数据时,OAEP填充错误

在Windows上使用openssl C ++进行RSA加密/解密错误

使用SHA-1时,使用SHA-256进行RSA OAEP加密失败

Android / Python如何使用RSA和PKCS1填充来验证签名SHA256

如何使用openssl EVP解密?

使用node-forge进行加密,并使用python和RSA-OAEP进行解密

使用 Sha256 RSA 验证 SignatureValue 和 DigestValue

使用SHA256和RSA进行编码

使用SHA-256AndMGF1Padding Swift加密RSA / ECB / OAEP

无法使用SubtleCrypto Web Crypto API解密用PyCryptodome加密的RSA-OAEP消息

使用 OpenSSL 1.1 的 SHA256 HMAC 未编译

在Delphi中使用OpenSSL验证SHA256签名失败

如何使用OpenSSL加密/解密AES-256 CBC?

如何使用BASH命令解密PHP Openssl加密

解密使用 openssl、oaep 填充模式加密的非对称密钥

使用Java解密OpenSSL PEM编码的RSA私钥?

如何在锈中使用sha256对sha256的输出进行哈希处理

无法在python中使用OAEP解密