为什么openssl以big-endian格式运行?

为什么openssl以big-endian格式运行?,openssl,cryptography,endianness,Openssl,Cryptography,Endianness,大端性有什么特别的优点还是小端性有什么限制?一般来说,“在线”使用大端性,而“芯片”则做芯片想做的任何事情(或者做很多工作来解决芯片想做的事情) OpenSSL的主要输入/输出流是DER(或BER)编码的ASN.1数据结构。BER编码系列使用big-endian,因为它主要设计为wire/interop格式。由于主流是big-endian,因此在big-endian中导入和导出中间数据结构(如BN)使它们的订单导入/导出更加容易。他们在封面下做的是一个实现细节 相比之下,Windows CAPI

大端性有什么特别的优点还是小端性有什么限制?

一般来说,“在线”使用大端性,而“芯片”则做芯片想做的任何事情(或者做很多工作来解决芯片想做的事情)

OpenSSL的主要输入/输出流是DER(或BER)编码的ASN.1数据结构。BER编码系列使用big-endian,因为它主要设计为wire/interop格式。由于主流是big-endian,因此在big-endian中导入和导出中间数据结构(如
BN
)使它们的订单导入/导出更加容易。他们在封面下做的是一个实现细节

相比之下,Windows CAPI最简单的密钥导入/导出API使用了一种专有格式,该格式(可能)设计为在给定内部结构的情况下更易于使用(因为它是为x86处理器设计的,所以使用小端)

在Windows加密技术改造期间,导致Windows CNG库的导入/导出格式更改为big-endian。有人认为,这样做的动机是看起来更像wire格式(以及其他库的导入/导出格式),以减少用户的困惑。

添加到@bartonjs:

是big endian,看

我们写阿拉伯数字的方式是大端,也就是说最重要的数字在左边,所以123是写的,小端是321

如果将1000(十进制)0x03e8(十六进制)的int16_t表示放在一台大端计算机上,“0x03”位于最低寻址字节中,0xe8位于下一个更高顺序字节中,则数字1000的大端位于第一位。在big-endian设备上以十六进制转储显示时,它们的自然顺序为0x03、0xe8。当在小型endian设备上以十六进制转储显示时,它们的顺序为0xe8、0x03,需要在头脑中重新排序


虽然现在很少有开发人员关注十六进制转储,但有一段时间不仅是经常做的,而且是必须做的。

openssl以什么方式“操作”big-endian格式?举个例子,考虑接受有帮助的答案。通过接受一个答案,你向未来的读者表明这是一个正确的答案。要接受答案,请单击最佳答案旁边的空心复选标记,这样做将提高您的声誉并允许更多功能,请参阅。也请考虑回过头来接受过去的答案,这样做会增加你的声誉,并允许更多的能力。@ JAMESKPK,通过操作,我的意思是它的API是这样写的,他们接受/返回大Endiad格式的数字。