由于一些奇怪的原因,我正在复制另一种不使用类型的语言的例子,并忘了在函数定义参数中添加一个,并且它有效.
#include <stdio.h>
char toChar(n) {
//sizeof n is 4 on my 32 bit system
const char *alpha = "0123456789ABCDEF";
return alpha[n];
}
int main() {
putchar(toChar(15)); //i.e.
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我确信某些标准的大多数编译器的main默认为int(但只返回),对于其他函数,这也是一种行为,或者这个实现是否定义了?这似乎与众不同,我的编译器只是一个稍微过时的GCC端口(MinGW).
我已经开始了一些工作需要一些高质量的随机字节,例如每次32个用于某些加密应用程序的初始化向量.我的问题是,这可能同时被多次调用,我无法承受块/dev/random问题等待更多的熵收集.
我可以用它来播种其他算法,例如/dev/urandom可能做什么 - 但是我不相信我无法理解的东西,我的方法上没有任何现成的资源,也不知道它是否在许多内核版本之间保持不变,我更喜欢某种定义明确的方法.
您是否了解任何可以考虑的标准PRNG方法,这些方法足以用于(同时)密钥生成等?
具有大种子的RC4等某些密码是否足以产生随机输出?(我已经看到了使用它的/ dev/frandom实现,但是我并不完全确定它.)
如果它意味着什么,我在无头Debian服务器,缺乏熵收集的原因.
我一直想要构建一个共享库,它将利用类来保持其运行清洁(可能需要许多输入或处理),尽管我仍然希望针对C平台.
如果我在我的所有原型上应用extern"C"{},并在示例中提供了一组模拟类函数的公开函数,以便对象不是"必需"来使用我的库,那些正常函数是否可以在C程序中运行会链接到它吗?
为了满足特定的需要,我在四个一个字节的字符中构建一个四字节整数,没有什么特别的(在我的小端平台上):
return (( v1 << 24) | (v2 << 16) | (v3 << 8) | v4);
Run Code Online (Sandbox Code Playgroud)
我知道,存储在大端机器整数会是什么样子AB BC CD DE,而不是DE CD BC AB小字节序的,但会是完全影响了我的操作,我会被错误地转移,或者它只会导致存储在逆向一个正确的结果需要扭转吗?
我想知道是否要为big-endian机器创建这个函数的第二个版本来进行(但未知)位操作,或者可能使用ntonl相关函数,我不清楚如何知道我的数字是否正确或不.
你有什么建议来确保兼容性,请记住我需要以这种方式形成整数?
在我的应用程序中,我需要一个函数来生成(不可预测的)随机值,每次调用时都会不同,例如在快速循环内.
在作为平台的Linux平台上,我将发布我的脚本(其中的PHP应在SSL下运行)我将通过查询/ dev/random,可能与OpenSSL结合,将可能的多个工具结合起来以确保种子或哈希是完全随机的设施并包括特定于系统的值,例如上次修改的脚本和创建时间.
我正在使用这些特定的值,因为即使人A有脚本并且知道方法,他们也无法猜测(/ dev/random内容,此刻的内存使用情况,可能的修改时间等)并且不会实际上能够降低运行相同脚本的用户B的安全性.
在Windows平台上,我不得不暂时开发(我仍然在Linux上测试,但不经常测试)我需要上面描述的随机值,只是为了提供至少有限的保护来预测种子或密钥.
我尝试过第一次尝试memory_get_usage()(使用或不true使用PHP的'true'内存使用的可用参数),并且即使每次迭代执行相当大量的内存繁重计算,它们似乎仍然是非常静态的.
使用这种(有点动态的)内存使用作为种子,PRNG生成更多(快速)随机数可能是明智的吗?或者记忆是如此有限的范围,他们可以创建2 ^ xx种子并大致猜测它..我开始模糊现实的随机线,如果甚至可以猜测我的操作,即使他们是'不'真的那么随意.