【发布时间】:2021-05-25 05:35:57
【问题描述】:
我正在做一个练习,我必须使用 3DES 和 OFB 和一些 python 库进行加密,在我的例子中使用 xycrypto (https://pypi.org/project/xycrypto/):
import base64
from xycrypto.ciphers import TripleDES_OFB
key = b'2ndl38aj2nk3l47d'
iv = b'pwler1o2'
plaintext = b'SupErCaliFRAGIlisTICOESpirALiDOso'
cipher = TripleDES_OFB(key, iv=iv)
msg = cipher.encrypt(plaintext)
dex = cipher.decrypt(base64.b64decode('HOQOSp3XKCe85sS6/5VMVuyM8lae5lmpqkMYlVm1Gxg/'))
print(dex)
msgF = '"'+base64.b64encode(msg).decode('utf-8')+'"'
keyF = '"'+key.decode('utf-8')+'"'
ivF = '"'+iv.decode('utf-8')+'"'
print(msgF)
html = open('../index.html','w')
mensaje = """<!DOCTYPE html>
<html lang="es" style="background-color: black; color: white;">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Tarea 3 Criptografia y seguridad en redes</title>
</head>
<body>
<p>Este sitio contiene un mensaje secreto</p>
<div class="algorithm" id="""+msgF+"""></div>
<div class="iv" id="""+ivF+"""></div>
<div class="key" id="""+keyF+"""></div>
</body>
</html>
"""
html.write(mensaje)
html.close()
创建一个HTML,其标签包含加密文本、密钥和iv,最后,根据练习的要求,我必须用JS和tampermonkey取值,插件代码如下:
(function decryptTripleDES() {
'use strict'
var html = document.getElementsByClassName("algorithm");
var html2 = document.getElementsByClassName("iv");
var html3 = document.getElementsByClassName("key");
var ciphertext = html[0].id
var key = html3[0].id;
var iv = html2[0].id;
var hexK = CryptoJS.enc.Hex.parse(key);
var hexI = CryptoJS.enc.Hex.parse(iv);
var decrypted = CryptoJS.TripleDES.decrypt(ciphertext, hexK, {
iv: hexI,
mode: CryptoJS.mode.OFB
});
alert(decrypted.toString(CryptoJS.enc.Utf8))
})();
插件导入cryptojs库,调用3DES和OFB的解密函数,我导入html参数,尝试解密内容并尝试用alert显示,但返回为空。难道我做错了什么?我突然想到,在 JS 中,我没有正确使用输入参数进行基本更改,但我不确定。
PD:我也尝试将 python 库更改为 PyCryptodome,但得到了相同的结果。
【问题讨论】:
标签: javascript python cryptography cryptojs