python爬虫逆向 某招投标信息网站返回结果解密

434 阅读1分钟

网站链接

aHR0cDovL2N0YnBzcC5jb20vIy8=

(base64解密后可见)

正文

网站搜索内容是后台加载的,且响应的内容是加密后的

然后大概看一下堆栈,除了vue,bs等资源的js,这个文件还是蛮可疑的

进去后,也没多少行代码,而且,看头部信息,加密的文件引用和加密方式一目了然

既然是des,那肯定还是有公钥的,在这个utils.js寻找下看有没有公钥,果然一目了然,甚至连注释都有,挺良心的啊,嗯

这就简单多了,直接吧原文js复制到本地,然后npm install crypto-js,最后再稍微改一下,就OK了,直接放代码吧

var CryptoJS = require("crypto-js");

CryptoJS.mode.ECB = (function() {
  var ECB = CryptoJS.lib.BlockCipherMode.extend();
  ECB.Encryptor = ECB.extend({
    processBlock: function(words, offset) {
      this._cipher.encryptBlock(words, offset);
    },
  });

  ECB.Decryptor = ECB.extend({
    processBlock: function(words, offset) {
      this._cipher.decryptBlock(words, offset);
    },
  });
  return ECB;
})();
//DES 加密
function encryptByDES(message) {
  var keyHex = CryptoJS.enc.Utf8.parse("ctpstp@custominfo!@#qweASD");
  var encrypted = CryptoJS.DES.encrypt(message, keyHex, {
    mode: CryptoJS.mode.ECB,
    padding: CryptoJS.pad.Pkcs7,
  });
  return encrypted.toString();
}
//DES 解密
function decryptByDES(ciphertext) {
  var keyHex = CryptoJS.enc.Utf8.parse("ctpstp@custominfo!@#qweASD");
  // direct decrypt ciphertext
  var decrypted = CryptoJS.DES.decrypt(
    {
      ciphertext: CryptoJS.enc.Base64.parse(ciphertext),
    },
    keyHex,
    {
      mode: CryptoJS.mode.ECB,
      padding: CryptoJS.pad.Pkcs7,
    }
  );
  return decrypted.toString(CryptoJS.enc.Utf8);
}

console.log(decryptByDES("接口返回的密文"))

最后,如果没问题,就能看到最后解密后的结果了,如图

小结

总体难度还是挺入门级别的,适合新手。这么良心的网站不多啦,且行且珍惜