关于RSA公钥包含非ASCII字符的疑问
关于RSA公钥包含非ASCII字符的疑问
嘿,这个问题我刚接触加密的时候也犯过懵,咱们慢慢理清楚哈~
你遇到的情况其实是混淆了公钥的二进制编码格式和可读的文本格式:
你拿到的那段Base64字符串,本质是DER编码的RSA公钥(二进制格式)经过Base64编码后的结果。当你直接解码Base64时,得到的是原始的二进制字节流——这些字节里大部分对应的值不在ASCII的可打印字符范围内(ASCII可打印字符是0x20到0x7E),所以用文本编辑器打开就会显示成那些“奇怪符号”,这完全是正常现象!
咱们平时看到的纯ASCII格式的公钥,一般是PEM格式:它就是把DER二进制公钥做Base64编码,再加上
-----BEGIN PUBLIC KEY-----和-----END PUBLIC KEY-----这两行ASCII头部尾部,变成方便复制粘贴的文本。比如你手里的这段Base64,补上头尾就是标准的PEM公钥:
-----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCqGKukO1De7zhZj6+H0qtjTkVxwTCpvKe4eCZ0FPqri0cb2JZfXJ/DgYSF6vUpwmJG8wVQZKjeGcjDOL5UlsuusFncCzWBQ7RKNUSesmQRMSGkVb1/3j+skZ6UtW+5u09lHNsj6tQ51s1SPrCBkedbNf0Tp0GbMJDyR4e9T04ZZwIDAQAB -----END PUBLIC KEY-----
这个格式就是纯ASCII的,你可以用加密工具验证它的有效性。
简单来说:公钥的核心是二进制数据,Base64解码后拿到的就是这个原始二进制,它本来就不是给人直接读的文本;而PEM格式是把二进制转成了可读的ASCII文本,这才是咱们日常能直接复制的那种公钥形式。
备注:内容来源于stack exchange,提问作者whoisit
相关产品推荐
相关产品推荐

