今天我想:好吧,即使RDRAND对NIST SP 800-90A的实施有很大的怀疑,它仍然是伪随机数发生器(PRNG)的硬件实现,对于非敏感应用来说必须足够好.所以我想在我的游戏而不是Mersenne Twister上使用它.
因此,为了查看使用该指令是否有任何性能提升,我比较了以下两个代码的时间:
// test.cpp
#include <cstdio>
int main()
{
unsigned int rnd = 0;
for(int i = 0; i < 10000000; ++i) {
__builtin_ia32_rdrand32_step(&rnd);
}
printf("%x\n", rnd);
}
Run Code Online (Sandbox Code Playgroud)
和
//test2.cpp
#include <cstdio>
#include <random>
int main()
{
unsigned int rnd = 0;
__builtin_ia32_rdrand32_step(&rnd);
std::mt19937 gen(rnd);
for(int i = 0; i < 10000000; ++i) {
rnd ^= gen();
}
printf("%x\n", rnd);
}
Run Code Online (Sandbox Code Playgroud)
通过运行这两个我得到:
$ time ./test
d230449a
real 0m0.361s
user 0m0.358s
sys 0m0.002s
$ time ./test2
bfc4e472 …Run Code Online (Sandbox Code Playgroud) 有没有人能够很好地实现用纯便携式C编写的流密码?在这个时间点,我并不十分关心密码的强度,因为它只是用于概念验证,但速度很重要.如果我找不到合适的流密码,我已经考虑过只用Xor'ing.
我有加密的想法,我可以很容易地编程加密一些本地文本文件.
鉴于我的方法是新颖的,并且不使用任何行业标准加密技术,我是否能够使用"cracker"应用程序或类似程序来测试我的加密强度?
或者所有这些工具都依赖于加密过程的先进知识(或截获的"密钥"),这意味着我必须构建自己的破解程序进行测试?
我正在读一本关于密码学的书,我陷入了一个问题.我真的试图解决它几个星期.但我认为问题是我无法理解整个画面.问题是这样的:
我们对基于LFSR的流密码进行已知明文攻击.我们知道发送的明文是:
1001 0010 0110 1101 1001 0010 0110
通过点击频道,我们观察以下流:
1011 1100 0011 0001 0010 1011 0001
1- What is the degree m of the key stream generator?
2- What is the initialization vector?
3- Determine the feedback coefficients of the LFSR.
4- Draw a circuit diagram and verify the output sequence of the LFSR.
Run Code Online (Sandbox Code Playgroud)
非常感谢您帮助我了解加密和LFSR.
在C中编写基本的基于LFSR的流密码加密模块后,我在常用文本文件上尝试了它,然后在Windows中的.exe文件上尝试了.但是,在解密后,文件没有运行,给出了一个关于16位的错误.显然在解密时有些错误.或者是文件制作,如果我篡改他们的二进制代码,他们会被破坏?
我正在检查我的程序文本文件,希望找到我的任何错误.但问题是,是否有人尝试在可执行文件上运行您自己的加密程序?这是他们明显的答案吗?
我需要在PHP中与使用ISAAC流密码的客户端进行通信.据我所知,没有一个可用于PHP的加密库实现了这个密码.如何在PHP应用程序中实现ISAAC密码?
(我已经找到了一个ISAAC的Java实现,几乎成功地将它移植到了PHP.唯一的问题是PHP中的无符号右移.我写了一个方法来实现它,但是当移位中的数字是负.)