לֹֽ֣א־יִהְיֶ֥͏ֽה־לְךָ֛֩ אֱלֹקִ֥֨ים אֲחֵרִ֖֜ים עַל־פָּנָֽ͏ַ֗י׃
לֹֽ֣א־תַעֲשֶֽׂ֨ה־לְךָ֥֣ פֶ֣֙סֶל֙ ׀ וְכׇל־תְּמוּנָ֔֡ה אֲשֶׁ֤֣ר בַּשָּׁמַ֣֙יִם֙ ׀ מִמַּ֔֡עַל וַֽאֲשֶׁ֥ר֩ בָּאָ֖֨רֶץ מִתָּ֑͏ַ֜חַת וַאֲשֶׁ֥ר בַּמַּ֖֣יִם ׀ מִתַּ֥֣חַת לָאָֽ֗רֶץ.
מְכַשֵּׁפָ֖ה לֹ֥א תְחַיֶּֽה׃
לֹֽא־יִמָּצֵ֣א בְךָ֔ מַעֲבִ֥יר בְּנֽוֹ־וּבִתּ֖וֹ בָּאֵ֑שׁ קֹסֵ֣ם קְסָמִ֔ים מְעוֹנֵ֥ן וּמְנַחֵ֖שׁ וּמְכַשֵּֽׁף׃
In[1]:
def xor_bytes(data, key):
return bytes([b ^ key[i % len(key)] for i, b in enumerate(data)])
key = b"secret"
msg1 = b"transfer $100 to Reuven"
msg2 = b"launch missile at dawn"
ct1 = xor_bytes(msg1, key)
ct2 = xor_bytes(msg2, key)
print(ct1)
print(ct2)
Out[1]:
b'\x07\x17\x02\x1c\x16\x12\x16\x17CVTDCE\x17\x1dE&\x16\x10\x15\x17\x0b'
b'\x1f\x04\x16\x1c\x06\x1cS\x08\n\x01\x16\x1d\x1f\x00C\x13\x11T\x17\x04\x14\x1c'
In[2]: leak = xor_bytes(ct1, ct2)
print(leak)
print(xor_bytes(msg1, msg2))
Out[2]:
b'\x18\x13\x14\x00\x10\x0eE\x1fIWBY\\ET\x0eTr\x01\x14\x01\x0b\x14'
b'\x18\x13\x14\x00\x10\x0eE\x1fIWBY\\ET\x0eTr\x01\x14\x01\x0b\x02'
In[3]: known = b"transfer $100 to Reuven"
guessed_other = xor_bytes(leak, known)
print(guessed_other)
Out[3]:
b'launch missile at dawn'