[PHP中的编码方法RS256

问题描述 投票:1回答:1

我必须执行本机JWT密钥方法,并且必须使用RSA256方法,但是当我尝试这样做时:

$sha256 = hex2bin("3031300d060960864801650304020105000420").hash("sha256",$data,true);
$encrypt_rsa = openssl_private_encrypt($sha256, $partialEncrypted, $privateKey, OPENSSL_PKCS1_PADDING);
$encrypted .= $partialEncrypted;

它返回给我:

]YXzn_U]f
                   " >@ќw
                         -<Bt
                             TD6W7  y͜CE    ^fa~N5[l<%xn1b>Eh3j}0D,eL5]q}$Vpg
fq/;~g7>r0M3Հ$WMA;?Y̶g DA|v7܄C%wɑ7{mh L

并且当我尝试使用该方法解码时:

$decrypt_rsa = openssl_public_decrypt($function_rsa, $partialDecrypted, $certificate, OPENSSL_PKCS1_PADDING);
$decrypted .= $partialDecrypted;

它什么也没给我返回。

我知道我的编码方法中有错误,但我不知道为什么。

谢谢:)

php encryption jwt rsa private-key
1个回答
0
投票

如果成功,则$decrypted$sha256相同。两者都包含不可打印的字符,因此应以正确的编码显示,例如使用bin2hex十六进制。这也适用于$encrypted。当前未定义$function_rsa。假设这是一个复制/粘贴错误,并且$function_rsa对应于$encrypted,该代码将起作用:

<?php

// Create an test key pair
$keypair = openssl_pkey_new(array("private_key_bits" => 2048));
openssl_pkey_export($keypair, $privateKey);
$publicKey = openssl_pkey_get_details($keypair);
$publicKey = $publicKey["key"];

$data = "The quick brown fox jumps over the lazy dog";

// Encrypt
$encrypted = "";
$sha256 = hex2bin("3031300d060960864801650304020105000420").hash("sha256", $data, true);
$encrypt_rsa = openssl_private_encrypt($sha256, $partialEncrypted, $privateKey, OPENSSL_PKCS1_PADDING);
$encrypted .= $partialEncrypted;

// Decrypt
$decrypted = "";
$decrypt_rsa = openssl_public_decrypt($encrypted, $partialDecrypted, $publicKey, OPENSSL_PKCS1_PADDING);
$decrypted .= $partialDecrypted;

// Compare
print("Original data:  " . bin2hex($sha256) . "\nEncrypted data: " . bin2hex($encrypted) . "\nDecrypted data: " . bin2hex($decrypted));

?>

另一个可能的错误源当然是键。如有必要,请再次检查。

具有前一个哈希ID的哈希的加密与使用RSASSA-PKCS1-v1_5-padding(RFC 8017)从其生成哈希的数据的签名相对应。请注意,使用openssl_sign

可以更轻松地生成数据签名。
openssl_sign
© www.soinside.com 2019 - 2024. All rights reserved.