【发布时间】:2016-06-30 03:47:05
【问题描述】:
我使用 RSA 方法加密密码,我设置了填充模式“OPENSSL_NO_PADDING”,它返回 false。但是如果我去掉填充模式参数,保持默认,加密成功。
$pass = 'gmwtwjfws';
$encrypetd_pass = '';
$pub_key = '-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs+JvfyTOMHqvjxHJyDZG
HZpz3atV7qcOT8mijXGGG3S+8Bb2p2kREGJwrzC2IIErCQUcZ3Wa3wTugKQDxqXE
SPt76HN2353ufegbvTI9kYgK0MLFpY8OZAMsaTytVrvUEVHjqGXZO4z7oVTqByuB
wcZAvK+sN39+MqisS6ZejACbbQLkWZgcSgt5wBAaDaEa2lvRYcVbNyO/mqTU6SSf
d+w78uM07BpmxhimOMwf+l/qs+Z04LUm4Ay7b+AHHAwbaHeehC1wInzNDfipgR0H
0FCa/LOnEblj2HVpptB/NY4XNG+CDHTBKkxzEw92D/Nj1JIlr1oP0l+/VdAnxxiW
uQIDAQAB
-----END PUBLIC KEY-----';
$result = openssl_public_encrypt($pass, $encrypetd_pass, $pub_key);
var_dump($result); //return false
exit;
此外,我对公钥的格式感到困惑。如果我保持默认的填充模式,并且公钥的格式如上,它返回true。但是当我修改密钥格式如下(删除一个新行)时,它返回false。有人会解释原因吗?非常感谢。
$pub_key = '-----BEGIN PUBLIC KEY-----MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs+JvfyTOMHqvjxHJyDZGHZpz3atV7qcOT8mijXGGG3S+8Bb2p2kREGJwrzC2IIErCQUcZ3Wa3wTugKQDxqXE
SPt76HN2353ufegbvTI9kYgK0MLFpY8OZAMsaTytVrvUEVHjqGXZO4z7oVTqByuB
wcZAvK+sN39+MqisS6ZejACbbQLkWZgcSgt5wBAaDaEa2lvRYcVbNyO/mqTU6SSf
d+w78uM07BpmxhimOMwf+l/qs+Z04LUm4Ay7b+AHHAwbaHeehC1wInzNDfipgR0H
0FCa/LOnEblj2HVpptB/NY4XNG+CDHTBKkxzEw92D/Nj1JIlr1oP0l+/VdAnxxiW
uQIDAQAB
-----END PUBLIC KEY-----';
【问题讨论】:
-
警告:openssl_public_encrypt():key 参数不是有效的公钥。函数 openssl_error_string 将显示“error:0906D06C:PEMroutines:PEM_read_bio:no start line”。