当一个人生成一个公钥和私钥,比如总共4096位时,为什么程序输出的是我假设的基数64而不是基数10或二进制呢?
发布于 2016-07-19 14:14:53
如果使用基64表示键,则取决于应用程序。许多实现/使用密码学的应用程序最初是在基于ASCII的通信已经司空见惯的时代设计的。如果要直接使用BER / DER (参数的二进制编码),那么丢失数据的可能性很大。例如,您将无法通过邮件或使用基于文本的FTP发送密钥。即使在今天,这也是有意义的,例如,在XML中集成签名时。这样,基础64就是安全的默认设置。
这就是为什么许多应用程序使用一种特殊格式,如PEM,它代表隐私增强邮件。当然,它也可以用于其他文本接口,但它最初是为邮件设计的。另一个术语是"ASCII装甲“,它表示意图:保护二进制编码不被文本接口破坏。
十进制接口不能工作;键不只是由一个或多个数字组成。BER/DER是ASN.1的二进制编码引擎,它能够表示几乎任何数据结构,包括字符串、日期、对象标识符和这些结构的组合。此外,正如已经指出的那样,小数也是非常低效的。
通常,密钥、证书和签名首先是二进制编码的,然后使用基数64进行“保护”。
发布于 2016-07-19 14:01:07
Base-64只是使用ASCII字符集表示二进制数据的一种方法。
之所以使用它,是因为单个base64数字表示全部位数(6位),其中每个十进制数字表示~3.3位,这会使转换变得有点棘手。
能够表示每位数字的更多位也意味着它比十进制更有效的空间。它需要683 base64数字来表示一个4096位的值,其中它需要1234位小数.
https://crypto.stackexchange.com/questions/37831
复制相似问题