- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图把 key 打成圆 key 。
我使用结构来保留 key :
struct key
{
u_int64_t key[4];
u_int32_t round_keys[8];
};
struct key *set_key()
{
struct key *key = malloc(sizeof(*key));
memset(key, 0, 4 * sizeof(u_int64_t) + 8 * sizeof(u_int32_t));
key->key[0] = 0x1;
key->key[1] = 0x1;
key->key[2] = 0x1;
key->key[3] = 0x1;
return key;
};
void key_to_round_keys(struct key *key)
{
memcpy(key->round_keys, key->key, sizeof(u_int32_t));
memcpy(key->round_keys + sizeof(u_int32_t), key->key + sizeof(u_int32_t), sizeof(u_int32_t));
memcpy(key->round_keys + 2 * sizeof(u_int32_t), key->key + 2 * sizeof(u_int32_t), sizeof(u_int32_t));
memcpy(key->round_keys + 3 * sizeof(u_int32_t), key->key + 3 * sizeof(u_int32_t), sizeof(u_int32_t));
memcpy(key->round_keys + 4 * sizeof(u_int32_t), key->key + 4 * sizeof(u_int32_t), sizeof(u_int32_t));
memcpy(key->round_keys + 5 * sizeof(u_int32_t), key->key + 5 * sizeof(u_int32_t), sizeof(u_int32_t));
memcpy(key->round_keys + 6 * sizeof(u_int32_t), key->key + 6 * sizeof(u_int32_t), sizeof(u_int32_t));
memcpy(key->round_keys + 7 * sizeof(u_int32_t), key->key + 7 * sizeof(u_int32_t), sizeof(u_int32_t));
};
int main() {
struct key *key = set_key();
key_to_round_keys(key);
printf("Key[1]: %llu\nRound key 1: %d", key->key[0], key->round_keys[0]);
delete_key(key);
}
最佳答案
key_to_round_keys
中的指针算法都是错的。对于指针加法,((p) + (i))
相当于 (&((p)[i]))
.
让我们假设 sizeof(u_int32_t)
在您的系统上是 4(很有可能),然后:
memcpy(key->round_keys + 7 * sizeof(u_int32_t), key->key + 7 * sizeof(u_int32_t), sizeof(u_int32_t));
memcpy(&key->round_keys[7 * 4], &key->key[7 * 4], sizeof(u_int32_t));
memcpy(&key->round_keys[28], &key->key[28], sizeof(u_int32_t));
round_keys
数组成员只有 8 个元素,而
key
数组成员只有 4 个元素长,所以这个
memcpy
的源和目标都是调用越界。
set_key
函数初始化
key
struct key
的数组成员至
{1, 1, 1, 1}
(四个 64 位数字),并且您已经表明您想要
key_to_round_keys
函数将其复制到
round_keys
数组成员为
{0, 1, 0, 1, 0, 1, 0, 1}
,看来你要
round_keys[0]
包含
key[0]
的高 32 位和
round_keys[1]
包含
key[0]
的低 32 位.或者一般来说,
round_keys[2*n]
应包含
key[n]
的高 32 位, 和
round_keys[2*n+1]
应包含
key[n]
的低 32 位.这可以按如下方式完成:
void key_to_round_keys(struct key *key)
{
key->round_keys[0] = key->key[0] >> 32;
key->round_keys[1] = key->key[0] & 0xFFFFFFFFu;
key->round_keys[2] = key->key[1] >> 32;
key->round_keys[3] = key->key[1] & 0xFFFFFFFFu;
key->round_keys[4] = key->key[2] >> 32;
key->round_keys[5] = key->key[2] & 0xFFFFFFFFu;
key->round_keys[6] = key->key[3] >> 32;
key->round_keys[7] = key->key[3] & 0xFFFFFFFFu;
};
void key_to_round_keys(struct key *key)
{
for (int n = 0; n < 4; n++)
{
key->round_keys[2*n] = key->key[n] >> 32;
key->round_keys[2*n+1] = key->key[n] & 0xFFFFFFFFu;
}
};
关于c - 将 256 位 key 击败为 32 位轮 key 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59289892/
我决定通过访问一个内部变量来解决 GNU libstdc++ 中的一个错误。回想起 Johannes 在他的博客上解决了这个问题,我检查了一下……但无法理解代码,除了获取静态初始化程序来完成肮脏工作的
多年后回到 C++;试图 catch C++11 和 14。我读过右值和移动语义。我以为我理解这个概念。显然不是。我看过几十个例子。但是我根本无法编译我的代码。我一定在示例中遗漏了一些明显的东西。由于
我正在用 celerybeat 运行 django+celery,但出现了这个错误 .../local/lib/python2.7/site-packages/celery/beat.py", lin
我已经阅读了很多关于 CORS/Lambda/AWS API 网关配置的内容,包括 AWS 的设置帮助: http://docs.aws.amazon.com/apigateway/latest/de
在页面加载的 asp.net Web 应用程序中,我获取当前页面 url 并将其存储在 session 变量中以跟踪用户所在的页面,以便他们在进入管理区域时可以返回到该页面,进行一些导航等。然后他们可
这个问题不太可能对任何 future 的访客有帮助;它只与一个较小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于全世界的互联网受众。如需帮助使此问题更广泛适用,visit the
在 Swift 中,我正在尝试构建一个大型项目集合。在移动中在 CoreData 中创建元素时,速度非常快。然而,当试图为这些项目保留索引时,创建数组 Swift 会对性能产生很大影响。下面的代码是
我有一个定期任务,我正在使用 worker 在 heroku procfile 上实现: Procile web: gunicorn voltbe2.wsgi --log-file - --log-l
我正在用 C# 编写一个应用程序,该应用程序使用 Office Outlook Interop(2010;版本 14)通过 MAPI 访问电子邮件数据。 到目前为止,我必须在 Outlook 的“程序
显然,sun.net.www.protocol.http.HttpURLConnection 将始终将“Java/version”附加到 UserAgent。因此,JSoup Connection.u
我是一名优秀的程序员,十分优秀!