0

所以我在做 2019 picoCTF 二进制挑战 seed-sPRiNG,我 用这段代码写了这篇文章:

#include <stdio.h> 
#include <time.h>
#include <stdlib.h> 
  
int main () 
{ 
    int i;
      
    srand(time(0)); 
    
    for (i = 0; i < 30; i++)
    {
        printf("%d\n", rand() & 0xf); 
    }
      
    return 0; 
} 

所以我想在python中实现相同的。起初我使用了 random 模块,但意识到 C rand 和 python 在它们的实现中相距甚远,所以我决定使用 ctypes:

#!/usr/bin/python3
from ctypes import CDLL

libc = CDLL("libc.so.6")

libc.srand(libc.time(0))


for i in range(30):
    print(libc.rand() % 0xf)

但是当我同时运行它们时我仍然得到不同的输出,我能解释一下为什么会这样吗

4

1 回答 1

2

在您的 Python 版本中,您修改了 by0xf而不是采用按位&运算。换句话说,您将结果修改为 15 而不是 16。如果我将 Python 版本切换为 use&而不是%,我会在我的机器上得到相同的结果。

于 2021-12-10T06:43:39.013 回答