RSA 可以做私钥加密,公钥解密吗?不是数字签名

2019-03-09 15:04:52 +08:00
 GuguguguDa
4531 次点击
所在节点    问与答
45 条回复
luchenqun
2019-03-09 15:27:34 +08:00
公钥可以解密的话,你加密的意义何在?
h123123h
2019-03-09 15:27:48 +08:00
私钥加密是签名吧
lululau
2019-03-09 15:29:05 +08:00
可以,签名就是对摘要做四月加密
lululau
2019-03-09 15:29:26 +08:00
私钥
GuguguguDa
2019-03-09 15:41:29 +08:00
@luchenqun 先不论意义何在吧,只是想问问能不能这样做,因为看了下面那个博文有些疑惑,私钥加密之后,公钥还能正常解密出来
https://blog.csdn.net/wangqiuyun/article/details/42143957
GuguguguDa
2019-03-09 15:42:32 +08:00
@lululau 签名是签名 加密是加密 不一样吧
GuguguguDa
2019-03-09 15:44:03 +08:00
@h123123h 看了上面那个博客,我觉得很疑惑,签名是签名,加密是加密
Kilerd
2019-03-09 16:03:40 +08:00
可以,
t6attack
2019-03-09 16:05:07 +08:00
<?php
//测试密钥-公钥
$pubKey="-----BEGIN PUBLIC KEY-----
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANSlDRoxEXWQrbIbFig3SuT/YH/K0q5/
OLBVloeXSr+dc+PWvXsRnwkxIkX5KznPCG9zLGe/Ga9XRyp+k2YrnrsCAwEAAQ==
-----END PUBLIC KEY-----";
//私钥
$privKey="-----BEGIN RSA PRIVATE KEY-----
MIIBOQIBAAJBANSlDRoxEXWQrbIbFig3SuT/YH/K0q5/OLBVloeXSr+dc+PWvXsR
nwkxIkX5KznPCG9zLGe/Ga9XRyp+k2YrnrsCAwEAAQJACg70m7SOet0pGi+l0Kks
5cAetGzHonFqIQ0rXaaOZpnZ7VeBTjklFVlVv/6UGr0h7jLclU+0UcEZ1lxwQUBx
wQIhAPoD6k+WOJld9D0p6ECLlS0ii4spj/T5o5ODdI+pkS2JAiEA2bwhZICOwb8w
FjfJOoKFcfuUfTk0n8y1DokfRQBC/SMCIBoZ8opgioQodOk1yNOEPwy5QIxEyIyw
y00JOlANSeTRAiBm+oeAlRzvnZEMsQ3HUnvy0N4F68xr19G6MjhL1jfYqQIgGiYa
RlI1jeOWFLKyxOFcNim8HUhfqIebm8Mccc0/3kQ=
-----END RSA PRIVATE KEY-----";

function pubEncrypt($data,$pubKey){ //公钥加密
$pubKey = openssl_pkey_get_public($pubKey);
openssl_public_encrypt($data, $encrypted, $pubKey);
return base64_encode($encrypted);
}
function privDecrypt($data,$privKey){ //私钥解密
$privKey=openssl_pkey_get_private($privKey);
$encrypted = base64_decode($data);
openssl_private_decrypt($encrypted, $decrypted, $privKey);
return $decrypted;
}

function privEncrypt($data,$privKey){ //私钥加密
$privKey=openssl_pkey_get_private($privKey);
openssl_private_encrypt($data, $encrypted, $privKey);
return base64_encode($encrypted);
}
function pubDecrypt($data,$pubKey){ //公钥解密
$pubKey = openssl_pkey_get_public($pubKey);
$encrypted = base64_decode($data);
openssl_public_decrypt($encrypted, $decrypted, $pubKey);
return $decrypted;
}

$string='一二三四五六七八九十';
echo '公钥加密:';
$en = pubEncrypt($string,$pubKey);
echo $en . '<br /> 私钥解密:';
$de = privDecrypt($en,$privKey);
echo $de;

echo "<br>";

$string='一二三四五六七八九十';
echo '私钥加密:';
$en = privEncrypt($string,$privKey);
echo $en . '<br /> 公钥解密:';
$de = pubDecrypt($en,$pubKey);
echo $de;
?>

有何疑问?
ayase252
2019-03-09 16:06:01 +08:00
可以,数字签名就是这么搞的
GuuJiang
2019-03-09 16:06:29 +08:00
取决于你怎么理解“加密”,如果“加密”指的是 RSA 里的“明文+密钥=密文”这个过程的话,用公钥和私钥都是可以的,公钥加密就对应的私钥解密,私钥公钥就对应的公钥解密,而如果放到实际的应用场景里,只有“公钥加密、私钥解密”才能起到保密信息的作用,这整个流程合起来称为“加密”,反之,“私钥加密、公钥解密”并不能让信息保密,但是却能起到验证发送者身份的作用,于是这整个流程称为“签名”
GuguguguDa
2019-03-09 16:08:10 +08:00
GuguguguDa
2019-03-09 16:09:05 +08:00
@GuuJiang 签名我可以理解,那么私钥加密之后的密文,可以用公钥还原的吗?
jssyxzy
2019-03-09 16:10:49 +08:00
私钥加密,公钥解密,
那么问题就来了,
为啥要加密啊,这个需求很奇葩啊。
jssyxzy
2019-03-09 16:12:26 +08:00
@GuguguguDa
“@luchenqun 先不论意义何在吧,只是想问问能不能这样做,因为看了下面那个博文有些疑惑,私钥加密之后,公钥还能正常解密出来
https://blog.csdn.net/wangqiuyun/article/details/42143957


做可以做,数字签名里面就有。
其实私钥加密公钥解密的一个作用是表明自己的身份。
GuguguguDa
2019-03-09 16:15:57 +08:00
@jssyxzy 唔 数字签名我理解
换个问题 私钥加密后的密文 能用公钥还原成明文吗?
jssyxzy
2019-03-09 16:19:02 +08:00
看第三章
![]( )
jssyxzy
2019-03-09 16:19:23 +08:00
@GuguguguDa
看上面那本书第三章
jssyxzy
2019-03-09 16:20:28 +08:00
@GuguguguDa
可以,
不对称加密的原理了解下。
h3lica
2019-03-09 16:23:22 +08:00
如果公钥指的是 RSA 里的 e 而私钥指的是 RSA 里的 d 的话。
加密函数表示为 C = M ^ d mod n
解密函数表示为 M = C ^ e = M ^ (e * d) = M mod n
从数学上看是可行的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/542798

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX