gpt4 book ai didi

异或密码的实现问题

转载 作者:行者123 更新时间:2023-12-04 11:01:14 25 4
gpt4 key购买 nike

我试图重新实现书中的简单 Xor 密码 Applied Cryptography
Protocols, Algorithms, and Source Code in C A book by Bruce Schneier
使用 python 。代码可以在本书的 1.4 节中找到。

c 代码形式的书

/* Usage:  crypto key input_file output_file */ 
void main (int argc, char *argv[])
{
FILE *fi, *fo;
char *cp;
int c;
if ((cp = argv[1]) && *cp!='\0') {
if ((fi = fopen(argv[2], "rb")) != NULL) {
if ((fo = fopen(argv[3], "wb")) != NULL) {
while ((c = getc(fi)) != EOF) {
if (!*cp) cp = argv[1];
c ^= *(cp++);
putc(c,fo);
}
fclose(fo);
}
fclose(fi);
}
}
}

我的python版本
import sys
def main(argc, argv):
fi = open(argv[2], 'rb')
fo = open(argv[3], 'wb')
index = 0

while True:
x = fi.read(1)
if not x: break
x = ord(x.decode())
fo.write( chr(x^ord( argv[1][index] )).encode() )
index += 1
if index == len(argv): index = 0
fi.close()
fo.close()


if __name__ == '__main__':
# usage: python3.7 simple_xor.py <key> <inputfile> <outputfile>
main( len(sys.argv), sys.argv )

他们都工作得很好。 但是 , 给出相同的 明文(输入文件)和同样的 key 对于上面的两个代码,它们不会返回相同的 密文 .

然而,他们都很好地解密了各自的密文。 (意思是同一个明文)

我的问题是:给定相同的 key 和明文,为什么它们不生成相同的密文?

最佳答案

C 版本对单个字节与 key 进行异或。 Python 版本使用 encode()decode()适用于字符,而不是字节。尝试使用重音字符或表情符号而不是 ASCII 字符来查看差异。

此外,包装 index 的条件下至 0是错的;您不是将它与 key 的长度进行比较。

话虽如此,这个问题更多的是关于如何使用 Python 而不是密码学。

关于异或密码的实现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58782941/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com