不积跬步,无以至千里;不积小流,无以成江海。

Dean's blog

  • Join Us on Facebook!
  • Follow Us on Twitter!
  • LinkedIn
  • Subcribe to Our RSS Feed

解密生意参谋市场排行加密数据

Python版本

import rsa
from Crypto.Cipher import AES
import base64
from binascii import a2b_hex


def get_transit_id():
    """
    获取transit_id
    :return: transit_id
    """
    # vendors.js  PUBLICKEY
    pubkey = rsa.PublicKey.load_pkcs1_openssl_pem("-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCJ50kaClQ5XTQfzkHAW9Ehi+iXQKUwVWg1R0SC3uYIlVmneu6AfVPEj6ovMmHa2ucq0qCUlMK+ACUPejzMZbcRAMtDAM+o0XYujcGxJpcc6jHhZGO0QSRK37+i47RbCxcdsUZUB5AS0BAIQOTfRW8XUrrGzmZWtiypu/97lKVpeQIDAQAB\n-----END PUBLIC KEY-----\n")
    crypto = rsa.encrypt(b"w28Cz694s63kBYk4", pubkey)
    
    transit_id = base64.b64encode(crypto).decode("utf-8")
    return transit_id


def data_decrypt(text):
    """
    对数据解密并处理
    :return: 解密处理后的店铺信息列表
    """
    password = "w28Cz694s63kBYk4"
    key = password.encode("utf-8")
    mode = AES.MODE_CBC
    b_data = bytes(text, encoding="utf-8")
    cryptor = AES.new(key, mode, b"4kYBk36s496zC82w")  # 偏移量
    plain_text = cryptor.decrypt(a2b_hex(b_data))
    result_data = bytes.decode(plain_text).rstrip("\0")
    return result_data

代码由壁洪提供,具体出处未拿到。使用data_decrypt可正常解密市场排行加密数据。

在安装Crypto模块的时候,直接使用pip install Crypto安装后,依然会提示Crypto包不存在,后网上查到需要按这样安装:

pip install pycryptodome

但是这样一直安装失败,后再查到,如果是Linux才这样安装,如果是Windows需要按下面的洛来安装:

pip install crypto pycryptodome
pip uninstall crypto pycryptodome
pip install pycryptodome

C#版本

由于我使用的工具是C#的,将上面的Python转成了C#代码,如下:

    public class SycmDecrypt
    {
        public static string Decrypt(string data)
        {
            string password = "w28Cz694s63kBYk4";
            //加密初始化向量
            string iv = "4kYBk36s496zC82w";
 
            return AESDecrypt(data, password, iv);
        }

        /// <summary>
        /// AES解密
        /// </summary>
        /// <param name="text"></param>
        /// <param name="password"></param>
        /// <param name="iv"></param>
        /// <returns></returns>
        public static string AESDecrypt(string text, string password, string iv)
        {
            byte[] byteKEY = Encoding.UTF8.GetBytes(password);
            byte[] byteIV = Encoding.UTF8.GetBytes(iv);
            byte[] byteDecrypt = HexStringToBytes(text);

            var _aes = new RijndaelManaged();
            _aes.Padding = PaddingMode.Zeros;
            _aes.Mode = CipherMode.CBC;

            _aes.Key = byteKEY;
            _aes.IV = byteIV;

            var _crypto = _aes.CreateDecryptor(byteKEY, byteIV);
            byte[] decrypted = _crypto.TransformFinalBlock(byteDecrypt, 0, byteDecrypt.Length);

            _crypto.Dispose();

            return Encoding.UTF8.GetString(decrypted);

        }

        /// <summary>
        /// 将16进制字符串转成Bytes数组
        /// </summary>
        /// <param name="hs"></param>
        /// <returns></returns>
        private static byte[] HexStringToBytes(string hs)
        {
            var length = hs.Length / 2;
            byte[] b = new byte[length];
            for (int i = 0; i < length; i++)
            {
                b[i] = Convert.ToByte(hs.Substring(i * 2,  2), 16);
            }
            return b;
        }
    }

 

不允许评论
粤ICP备17049187号-1