我目前正在用C编写一些密码代码,它必须处理大于uint64_t所能容纳的数字。(用于HDCP身份验证,其中一个密码值为84位)
做这件事最好的方法是什么?我需要存储的变量之一是84位长--低64位是一个uint64_t,高20位是uint32_t吗?对我来说,这似乎是一种黑客,但我不确定是否真的有更好的解决方案,尤其是存储在结构中的解决方案。
理想的替代方法是声明一个自定义数据类型,如uint64_t,而不是84位长,这样做的方式是相同的。这有可能吗?我不确定libc是否能够处理位宽不是8倍的变量,但是88位类型可以处理,尽管我甚至不确定声明自定义位宽数据类型的可行性。
编辑:--我已经检查过uint128_t了,但这似乎不存在于clang的C99模式中。我将对此执行标准算术和位操作,这是与密码相关的标准shebang。
发布于 2012-11-25 09:15:51
7年前,我的密码学教授向我们介绍了MIRACL开源库,它包含了一个非常快速的加密函数实现和处理大精度数字的工具。我已经很久没有使用过它了,但它似乎还处于良好状态。如果您的问题只是简单地表示84位值而不表示其他值,这可能并不理想,但它可能是一个更普遍的解决方案。
发布于 2012-11-25 06:46:15
好的,我刚刚安装了一个32位的Clang 3.1,这个功能是:
#include <stdio.h>
int main()
{
unsigned __int128 i;
printf("%d\n", sizeof(i));
}
(并印上“16”字)
发布于 2012-11-25 06:56:05
如果您需要超过64位,并且目标环境中没有大于64位的整数类型,那么您必须使用其他的东西。您必须使用两个变量,一个数组,或者一个包含多个成员的结构。如果您想要添加数字,您还必须自己创建这些操作,例如一个加号函数。
在C中没有内置的支持来轻松自动地创建N位整数.
https://stackoverflow.com/questions/13548802
复制相似问题