我正在尝试使用提供的密钥对Python中的加密图像进行XOR解密。 我已经能够解密一半的图像,而且我不明白为什么下半部分也不能解密。
string MyNewFile;
using (StreamWriter sWriter = new StreamWriter(MyNewFile, false, encoding, 1))
{
using (StreamReader sReplaceReader = new StreamReader(myFile))
{
string line, textLine = "";
while ((line = sReplaceReader.ReadLine()) != null)
{
if (line.Contains(" ")>=4 )//if contains 4 or more spaces
{
textLine = line.Replace(" ", "|");
}
sWriter.WriteLine(textLine);
}
}
}
我的循环是否存在问题,使得仅遍历一半的图像行后解密就停止了?
答案 0 :(得分:2)
您正在写newArr[t]
,但是t
是秘密字节值而不是索引。您应该在secret
和key
的内容上用逻辑异或运算完全替换for循环(假定密钥和秘密数组/矩阵可以广播为相同形状;有关广播{{ 3}}):
key = np.load('key.npy')
secret = plt.imread('secret.bmp')
newArr = np.logical_xor(key, secret)
plt.imshow(newArr)
答案 1 :(得分:0)
我假设您有len(key) < len(secret)
。
Python的zip
函数在到达较短序列的末尾时将停止,因此,如果密钥太短,则问题将不会在到达key
的末尾时解密剩余的数据。