我必须执行本机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;
它什么也没给我返回。
我知道我的编码方法中有错误,但我不知道为什么。
谢谢:)
如果成功,则$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