我们以这篇文章中的公钥为例:https://crypto.stackexchange.com/a/35105
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCqGKukO1De7zhZj6+H0qtjTkVxwTCpvKe4eCZ0FPqri0cb2JZfXJ/DgYSF6vUpwmJG8wVQZKjeGcjDOL5UlsuusFncCzWBQ7RKNUSesmQRMSGkVb1/3j+skZ6UtW+5u09lHNsj6tQ51s1SPrCBkedbNf0Tp0GbMJDyR4e9T04ZZwIDAQAB
当我使用在线工具解码此 base64 字符串时,我得到了一个包含一些有趣字符的公钥,如下所示:
00 *H ��0�;P8YcNEq0x&tG_)bFPd8TY5CJ5Dd1!U?oOe#9R>[5A0GONg�
我不明白为什么它包含非 ascii 字符,公钥不是应该是 ascii 格式而不是 unicode(包含有趣的字符)格式吗?
答案1
我不明白为什么它包含非 ascii 字符,公钥不是应该是 ascii 格式而不是 unicode(包含有趣的字符)格式吗?
不。密钥不是 ASCII;它不是由字符组成的一点儿也不。不需要字节来表示文本。
您拥有的格式是“二进制”结构,其中大多数字节直接通过其值表示数字。(与图像或音频文件相同。)
例如,1024 位 RSA 模数将直接存储为这 1024 位或 128 个字节,其数值将直接使用,而不是映射到任何类型的字符。周围的几个字节是 ASN.1 序列化格式边界。
这正是它首先采用 Base64 编码的原因。Base64 的全部目的是以“安全”的 ASCII 化形式传输非文本(非 ASCII)数据。