{"id":1543,"date":"2023-03-23T19:27:14","date_gmt":"2023-03-23T11:27:14","guid":{"rendered":"http:\/\/175.24.184.226\/?p=1543"},"modified":"2023-03-23T19:27:15","modified_gmt":"2023-03-23T11:27:15","slug":"python%e5%ae%9e%e7%8e%b0aes-des-rsa-md5-sm2-sm4-3des%e5%8a%a0%e5%af%86%e7%ae%97%e6%b3%95%e6%a8%a1%e6%9d%bf%e6%b1%87%e6%80%bb","status":"publish","type":"post","link":"\/?p=1543","title":{"rendered":"python\u5b9e\u73b0AES\/DES\/RSA\/MD5\/SM2\/SM4\/3DES\u52a0\u5bc6\u7b97\u6cd5\u6a21\u677f\u6c47\u603b"},"content":{"rendered":"<p><code>\u90fd\u662f\u4f5c\u8005\u7d2f\u79ef\u7684,\u4e14\u770b\u5176\u73cd\u60dc,\u5927\u5bb6\u53ef\u4ee5\u5c3d\u91cf\u53ef\u4ee5\u4fdd\u5b58\u4e00\u4e0b,\u5982\u679c\u8f6c\u8f7d\u8bf7\u5199\u597d\u51fa\u5904<\/code><a href=\"https:\/\/www.cnblogs.com\/pythonywy\">https:\/\/www.cnblogs.com\/pythonywy<\/a><\/p>\n<p><code>git\u5730\u5740<\/code> <a href=\"https:\/\/github.com\/a568972484\/The_encryption_template_Python\">https:\/\/github.com\/a568972484\/The_encryption_template_Python<\/a> <code>\u7ed9\u4e2a\u661f\u661f\u8c22\u8c22<\/code><\/p>\n<h2>\u4e00.md5\u52a0\u5bc6<\/h2>\n<h3>1.\u7b80\u4ecb<\/h3>\n<p><code>\u8fd9\u662f\u4e00\u79cd\u4f7f\u7528\u975e\u5e38\u5e7f\u6cdb\u7684\u52a0\u5bc6\u65b9\u5f0f\uff0c\u4e0d\u53ef\u9006\u7684,\u5e38\u89c116\u4f4d\u548c32\u4f4d\u4e00\u822c\u90fd\u662fmd5<\/code><\/p>\n<pre><code>import hashlib\n\ndata = &#039;\u4f60\u597d&#039;\nprint(hashlib.md5(data.encode(encoding=&quot;UTF-8&quot;)).hexdigest())  #32\u4f4d\nprint(hashlib.md5(data.encode(encoding=&quot;UTF-8&quot;)).hexdigest()[8:-8])  #16\u4f4d\n<\/code><\/pre>\n<h2>\u4e8c.RSA\u52a0\u5bc6<\/h2>\n<h3>1.\u7b80\u4ecb<\/h3>\n<p><code>\u975e\u5bf9\u79f0\u52a0\u5bc6\u7b97\u6cd5,\u4e5f\u5c31\u662f\u6bd4\u8f83\u5e38\u89c1\u7684\u516c\u94a5\u79c1\u94a5\u52a0\u5bc6,\u53ef\u9006\u7684<\/code><\/p>\n<h3>2.\u6307\u6570\u548c\u6a21\u52a0\u5bc6\u65e0\u586b\u5145-\u6a21\u677f\u4e00<\/h3>\n<pre><code>import rsa\n#\u6a21\nm = &quot;ae068c2039bd2d82a529883f273cf20a48e0b6faa564e740402375a9cb332a029b8492ae342893d9c9d53d94d3ab8ae95de9607c2e03dd46cebe211532810b73cc764995ee61ef435437bcddb3f4a52fca66246dbdf2566dd85fbc4930c548e7033c2bcc825b038e8dd4b3553690e0c438bbd5ade6f5a476b1cbc1612f5d501f&quot;\n#\u6307\u6570\ne = &#039;10001&#039;\n#\u52a0\u5bc6\u53c2\u6570\nmessage = &#039;123456&#039;\n\nclass Encrypt(object):\n    def __init__(self, e, m):\n        self.e = e\n        self.m = m\n\n    def encrypt(self, message):\n        mm = int(self.m, 16)\n        ee = int(self.e, 16)\n        rsa_pubkey = rsa.PublicKey(mm, ee)\n        crypto = self._encrypt(message.encode(), rsa_pubkey)\n        return crypto.hex()\n\n    def _pad_for_encryption(self, message, target_length):\n        message = message[::-1]\n        max_msglength = target_length - 11\n        msglength = len(message)\n\n        padding = b&#039;&#039;\n        padding_length = target_length - msglength - 3\n\n        for i in range(padding_length):\n            padding += b&#039;\\x00&#039;\n\n        return b&#039;&#039;.join([b&#039;\\x00\\x00&#039;, padding, b&#039;\\x00&#039;, message])\n\n    def _encrypt(self, message, pub_key):\n        keylength = rsa.common.byte_size(pub_key.n)\n        padded = self._pad_for_encryption(message, keylength)\n\n        payload = rsa.transform.bytes2int(padded)\n        encrypted = rsa.core.encrypt_int(payload, pub_key.e, pub_key.n)\n        block = rsa.transform.int2bytes(encrypted, keylength)\n\n        return block\n\nif __name__ == &#039;__main__&#039;:\n    en = Encrypt(e, m)\n    print(en.encrypt(message))\n<\/code><\/pre>\n<h3>3.\u6307\u6570\u548c\u6a21\u52a0\u5bc6\u65e0\u586b\u5145-\u6a21\u677f\u4e8c<\/h3>\n<pre><code>import codecs\n\ndef rsa_encrypt(content):\n    public_exponent = &#039;010001&#039;\n    public_modulus = &#039;ae068c2039bd2d82a529883f273cf20a48e0b6faa564e740402375a9cb332a029b8492ae342893d9c9d53d94d3ab8ae95de9607c2e03dd46cebe211532810b73cc764995ee61ef435437bcddb3f4a52fca66246dbdf2566dd85fbc4930c548e7033c2bcc825b038e8dd4b3553690e0c438bbd5ade6f5a476b1cbc1612f5d501f&#039;\n\n    content = content[::-1]\n    rsa = int(codecs.encode(content.encode(&#039;utf-8&#039;), &#039;hex_codec&#039;),\n              16) ** int(public_exponent, 16) % int(public_modulus, 16)\n    # \u628a10\u8fdb\u5236\u6570rsa\u8f6c\u4e3a16\u8fdb\u5236\uff08&#039;x&#039;\u8868\u793a16\u8fdb\u5236\uff09\uff0c\u518d\u53d6\u524d256\u4f4d\uff0c\u4e0d\u591f\u7684\u5728\u6700\u524d\u9762\u88650\n    return format(rsa, &#039;x&#039;).zfill(256)\n<\/code><\/pre>\n<h3>4.\u6307\u6570\u548c\u6a21\u52a0\u5bc6\u65e0\u586b\u5145-\u6a21\u677f\u4e09<\/h3>\n<pre><code>import math\nif __name__ == &#039;__main__&#039;:\n    # \u5b9e\u4e3a16\u8fdb\u5236\u4e32\uff0c\u524d\u88650\n    e = &#039;&#039;\n    # m\u4e5f\u9700\u8981\u886500\n    m = &#039;008eb933413be3234dddd2730fbb1d05c8848a43d5dc3bdd997f2a9935fba6beb9ffb36854482b0b46cf7e6f9afbbe2e2e7d606fde20bec57dbf722e7985192e8813e6b67628a6f202cf655b7d2ffce4e9dc682dd6034ae706c8e255f25e4051b9ca43f25b3ad686aac9c8f6aeb71d921c13a255c806f78a5a7b9a356c2dd274e3&#039;\n    m = int.from_bytes(bytearray.fromhex(m), byteorder=&#039;big&#039;)\n    e = int.from_bytes(bytearray.fromhex(e), byteorder=&#039;big&#039;)\n    # js\u52a0\u5bc6\u4e3a\u53cd\u5411\uff0c\u4e3a\u4fdd\u6301\u4e00\u81f4\u539f\u6587\u5e94\u53cd\u5411\u5904\u7406\uff0c\u6240\u4ee5\u8fd9\u91cc\u539f\u6587\u5b9e\u9645\u4e3a204dowls\n    plaintext = &#039;slwod402&#039;.encode(&#039;utf-8&#039;)\n    # \u65e0\u586b\u5145\u52a0\u5bc6\u903b\u8f91\n    input_nr = int.from_bytes(plaintext, byteorder=&#039;big&#039;)\n    crypted_nr = pow(input_nr, e, m)\n    keylength = math.ceil(m.bit_length() \/ 8)\n    crypted_data = crypted_nr.to_bytes(keylength, byteorder=&#039;big&#039;)\n    print(crypted_data.hex())\n<\/code><\/pre>\n<h3>5.\u6307\u6570\u548c\u6a21\u52a0\u5bc6\u6709\u586b\u5145<\/h3>\n<pre><code>from cryptography.hazmat.backends import default_backend\nfrom cryptography.hazmat.primitives.asymmetric import rsa\nfrom cryptography.hazmat.primitives.asymmetric import padding\nimport base64\nimport binascii\n\n&quot;&quot;&quot;\n\u53e6\u79cdrsa\u52a0\u5bc6\n&quot;&quot;&quot;\n\ndef data_encrypt(text):\n    &quot;&quot;&quot;\n        RSA \u52a0\u5bc6\n    :param text:    \u52a0\u5bc6\u524d\u5185\u5bb9\n    :return:        \u52a0\u5bc6\u540e\u5185\u5bb9\n    &quot;&quot;&quot;\n    # \u5224\u65ad\u7cfb\u7edf,\u52a0\u8f7d\u6307\u5b9a\u6a21\u5757\n    public_exponent = int(&quot;010001&quot;,16)  #\u6307\u6570\n    print(public_exponent)\n    public_modulus=int(&#039;B23322F080BD5876C0735D585D25C7BC409F637237B07744D27FBF39FB100ABE59DF380EA6BFCDF28C286E7A0CD95BE87F6099F8F39B0E97D9782C3D33FCFB80D43D2F22A9D9417ECFD1A0B8421DEE1CD4B323E8078336E77419A97F94E60A90CA06551202F63819FC8E73425F06ECA4C05BBF8CA32366240A6C36CA61D85019&#039;,16) #\u6a21\n    # content = &#039;leadeon&#039; + text + time.strftime(&quot;%Y%m%d%H%M%S&quot;, time.localtime())\n    content = text\n    max_length = 117\n    # public_key = serialization.load_pem_public_key(key, backend=default_backend())\n    public_key = rsa.RSAPublicNumbers(public_exponent, public_modulus).public_key(default_backend())\n    data = b&#039;&#039;\n    for i in range(0, len(content), max_length):\n        data += public_key.encrypt(content[i: i + max_length].encode(),\n                                   padding.PKCS1v15())\n    data = base64.b64encode(data).decode()\n    #data =binascii.b2a_hex(data).decode()  hex\u8f93\u51fa\n    return data\n<\/code><\/pre>\n<h3>6.\u516c\u94a5\u52a0\u5bc6<\/h3>\n<pre><code># \u516c\u94a5\u52a0\u5bc6\nimport base64\nimport rsa\nfrom Crypto.PublicKey import RSA\n\ndef encryptPassword(data, publicKeyStr):\n    &#039;&#039;&#039;\n    data:\u5185\u5bb9\n    publicKeyStr:\u4e0d\u9700\u8981-----BEGIN PUBLIC KEY-----\u5f00\u5934\uff0c-----END PUBLIC KEY-----\u7ed3\u5c3e\u7684\u683c\u5f0f,\u53ea\u8981\u4e2d\u95f4\u90e8\u5206\u5373\u53ef\n    key_encoded:\u9700\u8981-----BEGIN PUBLIC KEY-----\u5f00\u5934\uff0c-----END PUBLIC KEY-----\u7ed3\u5c3e\u7684\u683c\u5f0f\n    &#039;&#039;&#039;\n    key_encoded=&#039;&#039;&#039;-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCdZGziIrJOlRomzh7M9qzo4ibw\nQmwORcVDI0dsfUICLUVRdUN+MJ8ELd55NKsfYy4dZodWX7AmdN02zm1Gk5V5i2Vw\nGVWE205u7DhtRe85W1oR9WTsMact5wuqU6okJd2GKrEGotgd9iuAJm90N6TDeDZ4\nKHEvVEE1yTyvrxQgkwIDAQAB\n-----END PUBLIC KEY-----&#039;&#039;&#039;\n    # 1\u3001base64\u89e3\u7801\n    publicKeyBytes = base64.b64decode(publicKeyStr.encode())\n    # 3\u3001\u751f\u6210publicKey\u5bf9\u8c61\n    key = RSA.import_key(publicKeyBytes)\n    #key = RSA.import_key(key_encoded)\n    # 4\u3001\u5bf9\u539f\u5bc6\u7801\u52a0\u5bc6\n    encryptPassword = rsa.encrypt(data.encode(), key)\n    return base64.b64encode(encryptPassword).decode()\n<\/code><\/pre>\n<h3>7.\u79c1\u94a5\u89e3\u5bc6<\/h3>\n<pre><code># rsa \u89e3\u5bc6\ndef long_decrypt(msg):\n    rsa_private_key = &quot;&quot;&quot;-----BEGIN RSA PRIVATE KEY-----\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQClceuXNXcT7H8ElMfzfRhgOoxqmINR7LGXk+tUrIHHP8VCJfqxTKmow45dNK+kfBRKT9+uSxFlNV5uBdfaBFX13Eq8Ynq12hgvILYihU0gUNVuESTdFGaSS60AaCbuPpD9ENVgs4hrHfJwD4PWXCSpoPPcw9s4DSsxmapcHdE8hR21uWeEbQKISrZe+wdqI5Bv+iVqqd6MbX+pO3QJ4CcmVILomAEn64dHqP1cmRZaZ59J\/Y9aP9qYtiPYO0kArsxVDM6ZWkDyrbjJJcbaPBmi4JppNTD\/fRhDrSdRn8CBTZEnqRKLANhb4V+qaPaU9wAOWDwJqcT18RjfTcuxWi\/zAgMBAAECggEAIBabUgWNpfCdph7RNTmTC77vUxFnjvEwdKy83PxkY2fL84t4NwEeetwK9artUiK6sLsTMDPhGNckDITXm7JxlbD3Udhr4m99d06J5OIj1lu3OZTbqIF3b3J8CHMq8dRyvJKSQCIyGEyDpBZuRJo0hi3wfmYCU7nCIemi8CDcXzdGXTaRdiAW73nn+Ow8sFX+XG6\/6hPw9t+0r8GhrEfknC29NIPtAQqjamrKQm4lcW9eClId7vknZoNXsWw7w3B1pHy71GDFs+wquG8A3GjHOwySptrb0XexzwEzuxR0HJOdKrsNRSUncm0eY6lfQNW0PEN6IXopK0DooyCQO00rCQKBgQDZAEL6zDXPctCaPtS8qifd\/hN3aMz+XvX+O811sXYaB\/5ySndaR3mApJnbcoYDvL3EvFWL3YgjWL8Qp0HX7gTrdDuOv8yY+K2i347CCU+B0E81gP1tvUCVTc3x+hLKgcOs8UDH+GouLe1qycVs2FliuYngUFaZwOX4H4MFMiTgdQKBgQDDLa4JsnwY7kR88TLteEqC2G6Jk9IPRMut\/PDvdrGHyj6YEw7WbZLnyAMOEm1NeTa+bIr8mPPEEM1mrS3xaWwgn1rMqqzkSC\/DpgFppiJGBGX6cDFs2fYJOFBMzKlGIoHcWdl1SSEYbzxNo5ljoK6r+UaBfMcuuS5BHQ56nKpBxwKBgF2Lu1QajGftevfDdjoOsDkGuqWTTCusDCeY6C2AXwVBxPLIH0OP5FUMoDb128foqXYSKl6tFW8HZvZq4\/uN5BkMdlBHZo\/bRB8eeJA1K00u27aY8KdKGnlCnTFfOJKL9iqrpd2OvVdC\/UI30R\/m9EGW8lT8zRhjC8A29WhcAYGxAoGAA9U20LvvkfHD6Iw4Cs\/M7srfSNZdTq10LoOEG7\/B9r+zAPuG1BEszF5yKOmVuerCd3TcOd+rEdOepQCLoW0HkZBvkQtc\/9KnFXmCF5gKnkNh2UwwvEl\/emjfstJmFJmC4VfmXFZGTxuIHKI01e8G3xuzFcHki3dZgC\/Y4\/GFqmsCgYBvQbz9raUVVxJwkN+9UsciTNzW10Tkt2OLYlFRiD+QAC9XK7ZjrjIkQIXEL5OrzYDTU3aHNWt3QwZskSfwFD4P118ICkVdPI9If\/I0iqtQwCoIM83dtTFhJrImq0zxFn\/dxhJv6ga+\/CqJQmLHXMWt+vtvlSgcosvU3eYlVpoPjQ==\n-----END RSA PRIVATE KEY-----&quot;&quot;&quot;\n    msg = base64.b64decode(msg)\n    # \u79c1\u94a5\u89e3\u5bc6\n    priobj = Cipher_pkcs1_v1_5.new(RSA.importKey(rsa_private_key))\n    data = priobj.decrypt(msg,None).decode()\n    return data\n<\/code><\/pre>\n<h3>8..\u9a8c\u7b7e<\/h3>\n<pre><code>from Crypto.Cipher import PKCS1_v1_5 as Cipher_pkcs1_v1_5\nfrom Crypto.Signature import PKCS1_v1_5\n\nfrom Crypto.PublicKey import RSA\nfrom Crypto.Hash import SHA256\nimport base64\n\nclass RsaUtil:\n\n    def __init__(self, pub_key, pri_key):\n        self.pri_key_obj = None\n        self.pub_key_obj = None\n        self.verifier = None\n        self.signer = None\n        if pub_key:\n            pub_key = RSA.importKey(base64.b64decode(pub_key))\n            self.pub_key_obj = Cipher_pkcs1_v1_5.new(pub_key)\n            self.verifier = PKCS1_v1_5.new(pub_key)\n        if pri_key:\n            pri_key = RSA.importKey(base64.b64decode(pri_key))\n            self.pri_key_obj = Cipher_pkcs1_v1_5.new(pri_key)\n            self.signer = PKCS1_v1_5.new(pri_key)\n\n    def public_long_encrypt(self, data, charset=&#039;utf-8&#039;):\n        data = data.encode(charset)\n        length = len(data)\n        default_length = 117\n        res = []\n        for i in range(0, length, default_length):\n            res.append(self.pub_key_obj.encrypt(data[i:i + default_length]))\n        byte_data = b&#039;&#039;.join(res)\n        return base64.b64encode(byte_data)\n\n    def private_long_decrypt(self, data, sentinel=b&#039;decrypt error&#039;):\n        data = base64.b64decode(data)\n        length = len(data)\n        default_length = 128\n        res = []\n        for i in range(0, length, default_length):\n            res.append(self.pri_key_obj.decrypt(data[i:i + default_length], sentinel))\n        return str(b&#039;&#039;.join(res), encoding = &quot;utf-8&quot;)\n\n    def sign(self, data, charset=&#039;utf-8&#039;):\n        h = SHA256.new(data.encode(charset)) \n        signature = self.signer.sign(h)\n        return base64.b64encode(signature)\n\n    def verify(self, data, sign,  charset=&#039;utf-8&#039;):\n        h = SHA256.new(data.encode(charset))\n        return self.verifier.verify(h, base64.b64decode(sign))\n<\/code><\/pre>\n<h4>8.1MD5withRSA \u7b7e\u540d<\/h4>\n<pre><code>from Crypto.PublicKey import RSA\nfrom Crypto.Signature import PKCS1_v1_5\nfrom Crypto.Hash import MD5, SHA1, SHA256\nimport base64\nfrom flask import current_app\nimport warnings\nwarnings.filterwarnings(&quot;ignore&quot;)\n\ndef RSA_sign(data):\n    privateKey = &#039;&#039;&#039;MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAIooE+9hmb6GvAUQ3j9FDRgrhWMmVWKepKNmQerrvovmySUSPzFHainDMl6HuQAWHCMI9O8S9kzqG3o9pnetpG7JShB6Oc9eX0kA6n0vLR2rYXNo5uVC29\/Koqp250T7lzQ9bv6P0rkjIrqjTNIPVQXToyAwQcZQ5rVhUbtnP7YlAgMBAAECgYBpSzpGS0B9sPpDciOwXNQqA6FZe7G\/w+D+l8TNYnaK8Y2Dr3ByAlerFJWi7hXVNwSivwTN4MnOvO3MMIha1gBnQCFStI4PjRv2qz6vsGfzZKFadUw3ngzGhT5UtIVAd+IFbbr4J+cGjGMmF5lIEaKrRCS5u4p11uf6LmhvbBTm0QJBAMQA7RYimdU9UStIm\/RSkLQg6K89Om3S2AFXwqymiqhM4m6n7lRTE1xNX4pGm1BV8C\/qL0d7AHbrJBFi+hN5onMCQQC0cjAXmKdnfhTo0IvYtzpXr77odBz4zt2Ake65ssBJEWFzle69MbWgkbrTKLLjGxBwM+C7fPDGNckqhlpjMGcHAkB+vcKRT6p9svqrrHX8FO+xKp6LwmHn5jD7HU6q6b47egvpVfnM2TNpujaPaXzBA\/EeaqZL6IOyYfaer4vZ0At1AkEAqezuRQpIezlMT4I0b7z8gB7MVPMjZVrJVI4YlV8znJt1ffevfxMUy0Tw\/nDRJPUTodX4yBZ8VuvHqPgknkuyeQJBALYpXGOH\/GjlSVtnhq7eZxvoEqiBLawW5k7Rl1IyNdGR2qxY\/nnoCyP2mMCs1Ba05sCcX08zzOzMPvttbSyjqPI=&#039;&#039;&#039;\n\n    private_keyBytes = base64.b64decode(privateKey)\n    priKey = RSA.importKey(private_keyBytes)\n    # priKey = RSA.importKey(privateKey)\n    signer = PKCS1_v1_5.new(priKey,)\n    # SIGNATURE_ALGORITHM = &quot;MD5withRSA&quot;\n    hash_obj = MD5.new(data.encode(&#039;utf-8&#039;))\n    # SIGNATURE_ALGORITHM = &quot;SHA1withRSA&quot;\n    # hash_obj = SHA1.new(data.encode(&#039;utf-8&#039;))\n    # SIGNATURE_ALGORITHM = &quot;SHA256withRSA&quot;\n    # hash_obj = SHA256.new(data.encode(&#039;utf-8&#039;))\n\n    signature = base64.b64encode(signer.sign(hash_obj))\n    return signature\n\nif __name__ == &#039;__main__&#039;:\n    data = &quot;phone=15811352072&amp;timestamp=1612496512540&amp;device=Android&quot;\n    res_sign1 = RSA_sign(data)\n    signature = res_sign1.decode(&#039;utf8&#039;)\n    print(signature)\n<\/code><\/pre>\n<h4>8.2\u5b9e\u73b0SHA1withRSA \u7b7e\u540d<\/h4>\n<pre><code>from Crypto.PublicKey import RSA\nfrom Crypto.Signature import PKCS1_v1_5\nfrom Crypto.Hash import MD5, SHA1, SHA256\nimport base64\nfrom flask import current_app\nimport warnings\nwarnings.filterwarnings(&quot;ignore&quot;)\n\ndef RSA_sign(data):\n    privateKey = &#039;&#039;&#039;MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAIooE+9hmb6GvAUQ3j9FDRgrhWMmVWKepKNmQerrvovmySUSPzFHainDMl6HuQAWHCMI9O8S9kzqG3o9pnetpG7JShB6Oc9eX0kA6n0vLR2rYXNo5uVC29\/Koqp250T7lzQ9bv6P0rkjIrqjTNIPVQXToyAwQcZQ5rVhUbtnP7YlAgMBAAECgYBpSzpGS0B9sPpDciOwXNQqA6FZe7G\/w+D+l8TNYnaK8Y2Dr3ByAlerFJWi7hXVNwSivwTN4MnOvO3MMIha1gBnQCFStI4PjRv2qz6vsGfzZKFadUw3ngzGhT5UtIVAd+IFbbr4J+cGjGMmF5lIEaKrRCS5u4p11uf6LmhvbBTm0QJBAMQA7RYimdU9UStIm\/RSkLQg6K89Om3S2AFXwqymiqhM4m6n7lRTE1xNX4pGm1BV8C\/qL0d7AHbrJBFi+hN5onMCQQC0cjAXmKdnfhTo0IvYtzpXr77odBz4zt2Ake65ssBJEWFzle69MbWgkbrTKLLjGxBwM+C7fPDGNckqhlpjMGcHAkB+vcKRT6p9svqrrHX8FO+xKp6LwmHn5jD7HU6q6b47egvpVfnM2TNpujaPaXzBA\/EeaqZL6IOyYfaer4vZ0At1AkEAqezuRQpIezlMT4I0b7z8gB7MVPMjZVrJVI4YlV8znJt1ffevfxMUy0Tw\/nDRJPUTodX4yBZ8VuvHqPgknkuyeQJBALYpXGOH\/GjlSVtnhq7eZxvoEqiBLawW5k7Rl1IyNdGR2qxY\/nnoCyP2mMCs1Ba05sCcX08zzOzMPvttbSyjqPI=&#039;&#039;&#039;\n\n    private_keyBytes = base64.b64decode(privateKey)\n    priKey = RSA.importKey(private_keyBytes)\n    # priKey = RSA.importKey(privateKey)\n    signer = PKCS1_v1_5.new(priKey,)\n    # SIGNATURE_ALGORITHM = &quot;MD5withRSA&quot;\n    # hash_obj = MD5.new(data.encode(&#039;utf-8&#039;))\n    # SIGNATURE_ALGORITHM = &quot;SHA1withRSA&quot;\n    hash_obj = SHA1.new(data.encode(&#039;utf-8&#039;))\n    # SIGNATURE_ALGORITHM = &quot;SHA256withRSA&quot;\n    # hash_obj = SHA256.new(data.encode(&#039;utf-8&#039;))\n\n    signature = base64.b64encode(signer.sign(hash_obj))\n    return signature\n\nif __name__ == &#039;__main__&#039;:\n    data = &quot;phone=15811352072&amp;timestamp=1612496512540&amp;device=Android&quot;\n    res_sign1 = RSA_sign(data)\n    signature = res_sign1.decode(&#039;utf8&#039;)\n    print(signature)\n<\/code><\/pre>\n<h4>8.3SHA256withRSA\u7b7e\u540d<\/h4>\n<pre><code>from Crypto.PublicKey import RSA\nfrom Crypto.Signature import PKCS1_v1_5\nfrom Crypto.Hash import MD5, SHA1, SHA256\nimport base64\nfrom flask import current_app\nimport warnings\nwarnings.filterwarnings(&quot;ignore&quot;)\n\ndef RSA_sign(data):\n    privateKey = &#039;&#039;&#039;MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAIooE+9hmb6GvAUQ3j9FDRgrhWMmVWKepKNmQerrvovmySUSPzFHainDMl6HuQAWHCMI9O8S9kzqG3o9pnetpG7JShB6Oc9eX0kA6n0vLR2rYXNo5uVC29\/Koqp250T7lzQ9bv6P0rkjIrqjTNIPVQXToyAwQcZQ5rVhUbtnP7YlAgMBAAECgYBpSzpGS0B9sPpDciOwXNQqA6FZe7G\/w+D+l8TNYnaK8Y2Dr3ByAlerFJWi7hXVNwSivwTN4MnOvO3MMIha1gBnQCFStI4PjRv2qz6vsGfzZKFadUw3ngzGhT5UtIVAd+IFbbr4J+cGjGMmF5lIEaKrRCS5u4p11uf6LmhvbBTm0QJBAMQA7RYimdU9UStIm\/RSkLQg6K89Om3S2AFXwqymiqhM4m6n7lRTE1xNX4pGm1BV8C\/qL0d7AHbrJBFi+hN5onMCQQC0cjAXmKdnfhTo0IvYtzpXr77odBz4zt2Ake65ssBJEWFzle69MbWgkbrTKLLjGxBwM+C7fPDGNckqhlpjMGcHAkB+vcKRT6p9svqrrHX8FO+xKp6LwmHn5jD7HU6q6b47egvpVfnM2TNpujaPaXzBA\/EeaqZL6IOyYfaer4vZ0At1AkEAqezuRQpIezlMT4I0b7z8gB7MVPMjZVrJVI4YlV8znJt1ffevfxMUy0Tw\/nDRJPUTodX4yBZ8VuvHqPgknkuyeQJBALYpXGOH\/GjlSVtnhq7eZxvoEqiBLawW5k7Rl1IyNdGR2qxY\/nnoCyP2mMCs1Ba05sCcX08zzOzMPvttbSyjqPI=&#039;&#039;&#039;\n\n    private_keyBytes = base64.b64decode(privateKey)\n    priKey = RSA.importKey(private_keyBytes)\n    # priKey = RSA.importKey(privateKey)\n    signer = PKCS1_v1_5.new(priKey,)\n    # SIGNATURE_ALGORITHM = &quot;MD5withRSA&quot;\n    # hash_obj = MD5.new(data.encode(&#039;utf-8&#039;))\n    # SIGNATURE_ALGORITHM = &quot;SHA1withRSA&quot;\n    # hash_obj = SHA1.new(data.encode(&#039;utf-8&#039;))\n    # SIGNATURE_ALGORITHM = &quot;SHA256withRSA&quot;\n    hash_obj = SHA256.new(data.encode(&#039;utf-8&#039;))\n\n    signature = base64.b64encode(signer.sign(hash_obj))\n    return signature\n\nif __name__ == &#039;__main__&#039;:\n    data = &quot;phone=15811352072&amp;timestamp=1612496512540&amp;device=Android&quot;\n    res_sign1 = RSA_sign(data)\n    signature = res_sign1.decode(&#039;utf8&#039;)\n    print(signature)\n<\/code><\/pre>\n<h3>9.\u6700\u539f\u59cb\u65b9\u6cd5\u751f\u6210\u516c\u94a5\u548c\u79c1\u94a5\u751f\u6210\u901a\u8fc7(crtCoefficient,primeExponentP,primeP,modulus.....)<\/h3>\n<pre><code>from cryptography.hazmat.backends import default_backend\nfrom cryptography.hazmat.primitives.asymmetric import rsa\nfrom cryptography.hazmat.primitives import serialization\nfrom cryptography.hazmat.primitives.asymmetric import padding\nimport base64\nimport binascii\n\n&quot;&quot;&quot;\n&quot;crtCoefficient&quot;: 84432856058147832764138703472538317942464795044718601494587194148378563942685,\n&quot;primeExponentP&quot;: 55430473883101152246097615323756881862950432952434504984590276578045386834041,\n&quot;primeExponentQ&quot;: 41230473446336148758497170998210312513410109720579275453308960734626604833351,\n&quot;primeP&quot;: 109910049826842557628963433845850622251367013324570378590557090526907918339059,\n&quot;primeQ&quot;: 106061213575088596820097699717773256317123615840075518129430834072505546216719,\n&quot;publicExponent&quot;: 65537,\n&quot;modulus&quot;: 11657193268733377953496174345085266431511790176736829620324311319483544845433376888008449023832068012445414318729055242605500539982129558003843075736527421,\n&quot;privateExponent&quot;: 3398954883077133822319581237472486629533832773658606240974980011352534575146593099441248529746198644134125073285288483505741834384822184028018785454859181\n&quot;&quot;&quot;\n\ndef gen_rsa_keypair():\n    d = 3398954883077133822319581237472486629533832773658606240974980011352534575146593099441248529746198644134125073285288483505741834384822184028018785454859181\n    dmp1 = 55430473883101152246097615323756881862950432952434504984590276578045386834041\n    dmq1 = 41230473446336148758497170998210312513410109720579275453308960734626604833351\n    iqmp = 84432856058147832764138703472538317942464795044718601494587194148378563942685\n    p = 109910049826842557628963433845850622251367013324570378590557090526907918339059\n    q = 106061213575088596820097699717773256317123615840075518129430834072505546216719\n\n    # public key numbers\n    e = 65537\n    n = 11657193268733377953496174345085266431511790176736829620324311319483544845433376888008449023832068012445414318729055242605500539982129558003843075736527421\n\n    public_numbers = rsa.RSAPublicNumbers(e, n)\n    private_numbers = rsa.RSAPrivateNumbers(p, q, d, dmp1, dmq1, iqmp,public_numbers)\n    private_key = default_backend().load_rsa_private_numbers(private_numbers)\n\n    pubkey = public_numbers.public_key(default_backend())\n\n    puem = pubkey.public_bytes(\n        encoding=serialization.Encoding.PEM,\n        format=serialization.PublicFormat.SubjectPublicKeyInfo\n    )\n    # \u5c06PEM\u4e2a\u6570\u7684\u6570\u636e\u5199\u5165\u6587\u672c\u6587\u4ef6\u4e2d\n    with open(&quot;pu_key.pem&quot;, &#039;w+&#039;) as f:\n        f.writelines(puem.decode())\n\n    rpem = private_key.private_bytes(encoding=serialization.Encoding.PEM,\n                                     format=serialization.PrivateFormat.TraditionalOpenSSL,\n                             encryption_algorithm=serialization.NoEncryption())\n    with open(&quot;pr_key.pem&quot;, &#039;w+&#039;) as f:\n        f.writelines(rpem.decode())\n\n    return\n\nif __name__ == &#039;__main__&#039;:\n    gen_rsa_keypair()\n<\/code><\/pre>\n<h2>\u4e09.DES<\/h2>\n<h3>1.\u7b80\u4ecb<\/h3>\n<p><code>\u8fd9\u662f\u4e00\u4e2a\u5206\u7ec4\u52a0\u5bc6\u7b97\u6cd5\uff0c\u89e3\u5bc6\u548c\u52a0\u5bc6\u662f\u540c\u4e00\u4e2a\u7b97\u6cd5,\u53ef\u9006\u7684<\/code><\/p>\n<h3>2.DES\u52a0\u5bc6\u4e0e\u89e3\u5bc6\u4ee5\u53cahex\u8f93\u51fa\u548cbs64\u683c\u5f0f\u8f93\u51fa<\/h3>\n<pre><code>import pyDes\nimport base64\n\nKey = &quot;12345678&quot;  #\u52a0\u5bc6\u7684key\n\nIv = None   #\u504f\u79fb\u91cf\n\ndef bytesToHexString(bs):\n    &#039;&#039;&#039;\n    bytes\u8f6c16\u8fdb\u5236\n    &#039;&#039;&#039;\n    return &#039;&#039;.join([&#039;%02X &#039; % b for b in bs])\ndef hexStringTobytes(str):\n    &#039;&#039;&#039;16\u8fdb\u5236\u8f6cbytes&#039;&#039;&#039;\n    str = str.replace(&quot; &quot;, &quot;&quot;)\n    return bytes.fromhex(str)\n\n# \u52a0\u5bc6\ndef encrypt_str(data):\n    # \u52a0\u5bc6\u65b9\u6cd5\n    #padmode\u586b\u5145\u65b9\u5f0f\n    #pyDes.ECB\u6a21\u5f0f\n    method = pyDes.des(Key, pyDes.ECB, Iv, pad=None, padmode=pyDes.PAD_PKCS5)\n    # \u6267\u884c\u52a0\u5bc6\u7801 hex\u8f93\u51fa\n    k = method.encrypt(data)\n    data = bytesToHexString(k).replace(&#039; &#039;,&#039;&#039;)\n    #bs64\u624b\u7c97\n    #data =base64.b64encode(k)\n    return data\n\n# \u89e3\u5bc6\ndef decrypt_str(data):\n    method = pyDes.des(Key, pyDes.ECB, Iv, pad=None, padmode=pyDes.PAD_PKCS5)\n    k =hexStringTobytes(data)\n    #bs64\n    #k = base64.b64decode(data)\n    return method.decrypt(k)\n\nEncrypt = encrypt_str(&quot;aaa&quot;)\nprint(Encrypt)\nDecrypt = decrypt_str(Encrypt)\nprint(Decrypt)\n<\/code><\/pre>\n<h2>\u56db.3des<\/h2>\n<h3>\u4ee3\u7801\u6a21\u677f<\/h3>\n<pre><code>import hashlib, base64\nimport json\nfrom cryptography.hazmat.primitives.padding import PKCS7\nfrom cryptography.hazmat.primitives.ciphers import algorithms\nfrom Crypto.Cipher import DES3\n\ndef pkcs7padding(text):\n    &quot;&quot;&quot;\n    \u660e\u6587\u4f7f\u7528PKCS7\u586b\u5145\n    \u6700\u7ec8\u8c03\u7528DES3\u52a0\u5bc6\u65b9\u6cd5\u65f6\uff0c\u4f20\u5165\u7684\u662f\u4e00\u4e2abyte\u6570\u7ec4\uff0c\u8981\u6c42\u662f16\u7684\u6574\u6570\u500d\uff0c\u56e0\u6b64\u9700\u8981\u5bf9\u660e\u6587\u8fdb\u884c\u5904\u7406\n    :param text: \u5f85\u52a0\u5bc6\u5185\u5bb9(\u660e\u6587)\n    :return:\n    &quot;&quot;&quot;\n    bs = DES3.block_size  # 16\n    length = len(text)\n    bytes_length = len(bytes(text, encoding=&#039;utf-8&#039;))\n    # tips\uff1autf-8\u7f16\u7801\u65f6\uff0c\u82f1\u6587\u53601\u4e2abyte\uff0c\u800c\u4e2d\u6587\u53603\u4e2abyte\n    padding_size = length if (bytes_length == length) else bytes_length\n    padding = bs - padding_size % bs\n    # tips\uff1achr(padding)\u770b\u4e0e\u5176\u5b83\u8bed\u8a00\u7684\u7ea6\u5b9a\uff0c\u6709\u7684\u4f1a\u4f7f\u7528&#039;\\0&#039;\n    padding_text = chr(padding) * padding\n    return text + padding_text\n\ndef pkcs7_unpad(content):\n    &quot;&quot;&quot;\n    \u89e3\u5bc6\u65f6\u5019\u7528\n    :param content:\n    :return:\n    &quot;&quot;&quot;\n    if not isinstance(content, bytes):\n        content = content.encode()\n    pad = PKCS7(algorithms.DES3.block_size).unpadder()\n    pad_content = pad.update(content) + pad.finalize()\n    return pad_content\n\ndef encrypt(key, content):\n    &quot;&quot;&quot;\n    DES3\u52a0\u5bc6\n    key,iv\u4f7f\u7528\u540c\u4e00\u4e2a\n    \u6a21\u5f0fcbc\n    \u586b\u5145pkcs7\n    :param key: \u5bc6\u94a5\n    :param content: \u52a0\u5bc6\u5185\u5bb9\n    :return:\n    &quot;&quot;&quot;\n    key_bytes = bytes(key, encoding=&#039;utf-8&#039;)\n    iv = key_bytes\n    cipher = DES3.new(key_bytes, DES3.MODE_ECB)\n    # \u5904\u7406\u660e\u6587\n    content_padding = pkcs7padding(content)\n    # \u52a0\u5bc6\n    encrypt_bytes = cipher.encrypt(bytes(content_padding, encoding=&#039;utf-8&#039;))\n    # \u91cd\u65b0\u7f16\u7801\n    result = str(base64.b64encode(encrypt_bytes), encoding=&#039;utf-8&#039;)\n    return result\n\ndef decrypt(key,text):\n    key_bytes = bytes(key, encoding=&#039;utf-8&#039;)\n    iv = key_bytes\n    cryptos = DES3.new(key_bytes, DES3.MODE_ECB)\n    data = cryptos.decrypt(text)\n    return json.loads(pkcs7_unpad(data))\n<\/code><\/pre>\n<h2>\u4e94.AES\u52a0\u5bc6<\/h2>\n<h3>1.\u7b80\u4ecb<\/h3>\n<p><code>\u548cDES\u5dee\u4e0d\u591a,\u53ef\u9006\u7684<\/code><\/p>\n<h3>2.AES_ECB_pkcs5padding(\u8be5\u6a21\u677f\u4e0d\u517c\u5bb9\u4e2d\u6587)<\/h3>\n<pre><code>from Crypto.Cipher import AES\nimport base64\n\nclass Aes_ECB(object):\n    def __init__(self):\n        self.key = &#039;XXXXXXXXXXX&#039;  #\u79d8\u94a5\n        self.MODE = AES.MODE_ECB\n        self.BS = AES.block_size\n        self.pad = lambda s: s + (self.BS - len(s) % self.BS) * chr(self.BS - len(s) % self.BS)\n        self.unpad = lambda s: s[0:-ord(s[-1])]\n\n    # str\u4e0d\u662f16\u7684\u500d\u6570\u90a3\u5c31\u8865\u8db3\u4e3a16\u7684\u500d\u6570\n    def add_to_16(value):\n        while len(value) % 16 != 0:\n            value += &#039;\\0&#039;\n        return str.encode(value)  # \u8fd4\u56debytes\n\n    def AES_encrypt(self, text):\n        aes = AES.new(Aes_ECB.add_to_16(self.key), self.MODE)  # \u521d\u59cb\u5316\u52a0\u5bc6\u5668\n        encrypted_text = str(base64.encodebytes(aes.encrypt(Aes_ECB.add_to_16(self.pad(text)))),\n                             encoding=&#039;utf-8&#039;).replace(&#039;\\n&#039;, &#039;&#039;)  # \u8fd9\u4e2areplace\u5927\u5bb6\u53ef\u4ee5\u5148\u4e0d\u7528\uff0c\u7136\u540e\u5728\u8c03\u8bd5\u51fa\u6765\u7684\u7ed3\u679c\u4e2d\u770b\u662f\u5426\u6709&#039;\\n&#039;\u6362\u884c\u7b26\n        # \u6267\u884c\u52a0\u5bc6\u5e76\u8f6c\u7801\u8fd4\u56debytes\n        return encrypted_text\n<\/code><\/pre>\n<h3>3.AES_ECB_pkcs7padding(\u652f\u6301\u4e2d\u6587)<\/h3>\n<pre><code>import hashlib, base64\nfrom Crypto.Cipher import AES\nfrom cryptography.hazmat.primitives.padding import PKCS7\nfrom cryptography.hazmat.primitives.ciphers import algorithms\n\ndef pkcs7padding(text):\n    &quot;&quot;&quot;\n    \u660e\u6587\u4f7f\u7528PKCS7\u586b\u5145\n    \u6700\u7ec8\u8c03\u7528AES\u52a0\u5bc6\u65b9\u6cd5\u65f6\uff0c\u4f20\u5165\u7684\u662f\u4e00\u4e2abyte\u6570\u7ec4\uff0c\u8981\u6c42\u662f16\u7684\u6574\u6570\u500d\uff0c\u56e0\u6b64\u9700\u8981\u5bf9\u660e\u6587\u8fdb\u884c\u5904\u7406\n    :param text: \u5f85\u52a0\u5bc6\u5185\u5bb9(\u660e\u6587)\n    :return:\n    &quot;&quot;&quot;\n    bs = AES.block_size  # 16\n    length = len(text)\n    bytes_length = len(bytes(text, encoding=&#039;utf-8&#039;))\n    # tips\uff1autf-8\u7f16\u7801\u65f6\uff0c\u82f1\u6587\u53601\u4e2abyte\uff0c\u800c\u4e2d\u6587\u53603\u4e2abyte\n    padding_size = length if (bytes_length == length) else bytes_length\n    padding = bs - padding_size % bs\n    # tips\uff1achr(padding)\u770b\u4e0e\u5176\u5b83\u8bed\u8a00\u7684\u7ea6\u5b9a\uff0c\u6709\u7684\u4f1a\u4f7f\u7528&#039;\\0&#039;\n    padding_text = chr(padding) * padding\n    return text + padding_text\n\ndef pkcs7_unpad(content):\n    &quot;&quot;&quot;\n    \u89e3\u5bc6\u65f6\u5019\u7528\n    :param content:\n    :return:\n    &quot;&quot;&quot;\n    if not isinstance(content, bytes):\n        content = content.encode()\n    pad = PKCS7(algorithms.AES.block_size).unpadder()\n    pad_content = pad.update(content) + pad.finalize()\n    return pad_content\n\ndef encrypt(key, content):\n    &quot;&quot;&quot;\n    AES\u52a0\u5bc6\n    key,iv\u4f7f\u7528\u540c\u4e00\u4e2a\n    \u6a21\u5f0fcbc\n    \u586b\u5145pkcs7\n    :param key: \u5bc6\u94a5\n    :param content: \u52a0\u5bc6\u5185\u5bb9\n    :return:\n    &quot;&quot;&quot;\n    key_bytes = bytes(key, encoding=&#039;utf-8&#039;)\n    iv = key_bytes\n    cipher = AES.new(key_bytes, AES.MODE_ECB)\n    # \u5904\u7406\u660e\u6587\n    content_padding = pkcs7padding(content)\n    # \u52a0\u5bc6\n    encrypt_bytes = cipher.encrypt(bytes(content_padding, encoding=&#039;utf-8&#039;))\n    # \u91cd\u65b0\u7f16\u7801\n    result = str(base64.b64encode(encrypt_bytes), encoding=&#039;utf-8&#039;)\n    return result\n\ndef decrypt(key,text):\n    key_bytes = bytes(key, encoding=&#039;utf-8&#039;)\n    iv = key_bytes\n    cryptos = AES.new(key_bytes, AES.MODE_ECB)\n    data = cryptos.decrypt(text)\n    return json.loads(pkcs7_unpad(data))\n<\/code><\/pre>\n<h3>4.\u9b54\u6539\u7684AES\u80fd\u89e3\u5bc6,\u4f46\u662f\u52a0\u5bc6\u957f\u5ea6\u548cjs\u4e0d\u540c\u6a21\u677f<\/h3>\n<p><code>\u53ef\u80fd\u662f\u5f53\u4e2d\u7684\u4e2d\u6587\u5f71\u54cd\u7684<\/code><\/p>\n<pre><code># _*_ coding: utf-8 _*_\nimport base64\nfrom cryptography.hazmat.primitives.padding import PKCS7\nfrom cryptography.hazmat.primitives.ciphers import algorithms\nimport json\nimport binascii\nfrom Crypto.Cipher import AES\n\ndef pkcs7_pad(content):\n    &quot;&quot;&quot;\n    :param content:\n    :return:\n    &quot;&quot;&quot;\n    if not isinstance(content, bytes):\n        content = content.encode(&quot;raw_unicode_escape&quot;)\n    pad = PKCS7(algorithms.AES.block_size).padder()\n    pad_content = pad.update(content) + pad.finalize()\n    print(pad_content)\n\n    return pad_content\n\ndef pkcs7_unpad(content):\n    &quot;&quot;&quot;\n    \u89e3\u5bc6\u65f6\u5019\u7528\n    :param content:\n    :return:\n    &quot;&quot;&quot;\n    if not isinstance(content, bytes):\n        content = content.encode()\n    pad = PKCS7(algorithms.AES.block_size).unpadder()\n    pad_content = pad.update(content) + pad.finalize()\n    return pad_content\n\ndef encrypt_2(key, content, need_replace_wrod_list):\n    &quot;&quot;&quot;\n    AES\u52a0\u5bc6\n    key,iv\u4f7f\u7528\u540c\u4e00\u4e2a\n    \u6a21\u5f0fcbc\n    \u586b\u5145pkcs7\n    :param key: \u5bc6\u94a5\n    :param content: \u52a0\u5bc6\u5185\u5bb9\n    :return:\n    &quot;&quot;&quot;\n    key_bytes = bytes(key, encoding=&#039;utf-8&#039;)\n    cipher = AES.new(key_bytes, AES.MODE_ECB)\n    # \u5904\u7406\u660e\u6587\n    print(&quot;need_replace_wrod_list:&quot;, need_replace_wrod_list)\n    b = content.encode(&#039;utf-8&#039;)\n    for word in need_replace_wrod_list:  # str\n        b = b.replace(word.encode(&quot;unicode_escape&quot;), str_to_hex_x(word))\n    content_padding = pkcs7_pad(b)\n\n    # \u52a0\u5bc6\n    encrypt_bytes = cipher.encrypt(content_padding)\n    # \u91cd\u65b0\u7f16\u7801\n    result = str(base64.urlsafe_b64encode(encrypt_bytes), encoding=&quot;utf-8&quot;).replace(&quot;+&quot;, &quot;-&quot;).replace(&quot;_&quot;, &quot;\/&quot;)\n    return result\n\ndef decrypt(key, text):\n    text = base64.b64decode(text)\n    key_bytes = bytes(key, encoding=&#039;utf-8&#039;)\n    cryptos = AES.new(key_bytes, AES.MODE_ECB)\n    data = cryptos.decrypt(text)\n    print(data)\n    return json.loads(pkcs7_unpad(data))\n\ndef dict_json(d):\n    &#039;&#039;&#039;python\u5b57\u5178\u8f6cjson\u5b57\u7b26\u4e32, \u53bb\u6389\u4e00\u4e9b\u7a7a\u683c&#039;&#039;&#039;\n    j = json.dumps(d).replace(&#039;&quot;: &#039;, &#039;&quot;:&#039;).replace(&#039;, &quot;&#039;, &#039;,&quot;&#039;).replace(&quot;, {&quot;, &quot;,{&quot;)\n    return j\n\ndef str_to_hex(s):\n    return r&quot;\/x&quot; + r&#039;\/x&#039;.join([hex(ord(c)).replace(&#039;0x&#039;, &#039;&#039;) for c in s])\n\ndef str_to_hex_x(s):\n    &#039;&#039;&#039;\n    \u5b57\u7b26\u4e32\u8f6cb&#039;\\xe7\\xaf\\xae\\xe7\\x90\\x83&#039;\n    :param s:\n    :return:\n    &#039;&#039;&#039;\n\n    s = binascii.hexlify(s.encode()).decode()\n    s_list = []\n    for index in range(2, len(s) + 2, 2):\n        ss = f&quot;x{s[index - 2:index]}&quot;\n        s_list.append(ss)\n\n    s_1 = &quot;\\\\&quot;.join(s_list)\n    s_2 = f&#039;b&quot;\\\\{s_1}&quot;&#039;\n    return eval(s_2)\n\ndef get_chinese(string):\n    &quot;&quot;&quot;\n    \u68c0\u67e5\u6574\u4e2a\u5b57\u7b26\u4e32\u662f\u5426\u5305\u542b\u4e2d\u6587\n    :param string: \u9700\u8981\u68c0\u67e5\u7684\u5b57\u7b26\u4e32\n    :return: bool\n    &quot;&quot;&quot;\n    s_list = []\n    s = &quot;&quot;\n    for ch in string:\n        if &#039;\\u4e00&#039; &lt;= ch &lt;= &#039;\\u9fff&#039;:\n            s += ch\n        else:\n            if s:\n                s_list.append(s)\n                s = &quot;&quot;\n\n    return s_list\n\nif __name__ == &#039;__main__&#039;:\n    keyStr = &quot;V2ZRDLQKR7IL1GZC&quot;\n    a = decrypt(keyStr,\n                &quot;Ui2PiLP14MUkvdXaxzqmTySxYtamuhHuwE5nwjxuwHH0IKJ3EVFr9gJODUuYlFl8RMaCZFQ7rW7Ye6S2YAkI6ARXWElx7zG8fAokxcgdH5UU7gpabvtgm3+2N9WF+g009NchttTUT8IIsoCX3tOiKdGQF48M5TMnbXTV9\/cDUi4tp3ikDYuS9k8nU\/iSoepJZ0Gd3xt27IA8wNGR1n7oDd3rEKitOOY3CEgNxBm\/MviMnqYZtmWA4G7NlXFGZqT5I8HqPfsUub5vCYclx5z1Zru1ay5sQ5a2vYhpGqYJcLk0OZCgM\/qlZmfVGhFrkWLGOnjWlqal7U9z4bVKP8X8lc2uA0dUisxczdaKqKNQ0P66ByVzTEmNiNIOBgvIcZ3KnQrNK5nqna4OdjrygczbPKuartSsmgM503GnLAwXtMshewdukQstasl8ZR\/XOsR+wCX4MKOmrZoOyklgSay6LIUv4D29TTUEzT1SMTl7yKM4cwgpBcS2UwXsvWKGNZxGoYxqqEdBj6+DxzLafXSdyfh38KAQekvpOwNAHOfo4r54Ep1Bln+5CDehGiBTqVW2&quot;)\n    print(a)\n    t = {&#039;venTypeId&#039;: &#039;8dc0e52c-564a-4d9a-9cb2-08477f1a18d4&#039;, &#039;venueId&#039;: &#039;3b10ff47-7e83-4c21-816c-5edc257168c1&#039;,\n         &#039;fieldType&#039;: &#039;\u7bee\u7403&#039;, &#039;returnUrl&#039;: &#039;https:\/\/sports.sjtu.edu.cn\/#\/paymentResult\/1&#039;, &#039;scheduleDate&#039;: &#039;2022-02-23&#039;,\n         &#039;week&#039;: &#039;3&#039;, &#039;spaces&#039;: [\n            {&#039;venuePrice&#039;: &#039;15&#039;, &#039;count&#039;: 1, &#039;status&#039;: 1, &#039;scheduleTime&#039;: &#039;12:00-13:00&#039;, &#039;subSitename&#039;: &#039;\u573a\u57301-2&#039;,\n             &#039;subSiteId&#039;: &#039;391cff6c-b950-453b-ae80-7a1afa6ac7f1&#039;, &#039;tensity&#039;: &#039;1&#039;, &#039;venueNum&#039;: 1}], &#039;tenSity&#039;: &#039;\u7d27\u5f20&#039;}\n    t_1 = str(t)\n    print(str_to_hex_x(&quot;\u7bee\u7403&quot;))\n    t = json.dumps(t, separators=(&#039;,&#039;, &#039;:&#039;))\n    need_replace_wrod_list = get_chinese(t_1)\n    print(encrypt_2(keyStr, t, need_replace_wrod_list))\n    print(\n        &quot;Ui2PiLP14MUkvdXaxzqmTySxYtamuhHuwE5nwjxuwHH0IKJ3EVFr9gJODUuYlFl8RMaCZFQ7rW7Ye6S2YAkI6ARXWElx7zG8fAokxcgdH5UU7gpabvtgm3+2N9WF+g009NchttTUT8IIsoCX3tOiKdGQF48M5TMnbXTV9\/cDUi4tp3ikDYuS9k8nU\/iSoepJZ0Gd3xt27IA8wNGR1n7oDd3rEKitOOY3CEgNxBm\/MviMnqYZtmWA4G7NlXFGZqT5I8HqPfsUub5vCYclx5z1Zru1ay5sQ5a2vYhpGqYJcLk0OZCgM\/qlZmfVGhFrkWLGOnjWlqal7U9z4bVKP8X8lc2uA0dUisxczdaKqKNQ0P66ByVzTEmNiNIOBgvIcZ3KnQrNK5nqna4OdjrygczbPKuartSsmgM503GnLAwXtMshewdukQstasl8ZR\/XOsR+wCX4MKOmrZoOyklgSay6LIUv4D29TTUEzT1SMTl7yKM4cwgpBcS2UwXsvWKGNZxGoYxqqEdBj6+DxzLafXSdyfh38KAQekvpOwNAHOfo4r54Ep1Bln+5CDehGiBTqVW2&quot;)\n<\/code><\/pre>\n<h3>5.\u8bc6\u522b\u662fAES_128\\192\\256\u600e\u4e48\u8bc6\u522b<\/h3>\n<pre><code>\u6839\u636ekey\u7684\u957f\u5ea6\u8fdb\u884c\u8bc6\u522b\n128 16\u4f4d\n192 24\u4f4d\n256 32\u4f4d\n#\u57fa\u672c\u4e0a\u4e0d\u8db3\u7684\u90e8\u5206\u90fd\u662f\u4ee50\u8fdb\u884c\u586b\u5145\n<\/code><\/pre>\n<h3>6.ECB\u548cCBC\u5728\u4ee3\u7801\u5b9e\u73b0\u4e0a\u7684\u533a\u522b<\/h3>\n<pre><code>CBC\u76f8\u6bd4ECB\u591a\u4e00\u4e2a\u504f\u79fb\u91cf,\u81f3\u4e8e\u5176\u4ed6\u5730\u65b9\u4ee3\u7801\u533a\u522b\u4e0d\u5927\n<\/code><\/pre>\n<h3>7.gzip\u8f93\u51fa\u89e3\u5bc6<\/h3>\n<pre><code># -*- coding: utf-8 -*-\nfrom cryptography.hazmat.primitives.ciphers import algorithms\nfrom cryptography.hazmat.primitives.ciphers import Cipher\nfrom cryptography.hazmat.primitives.ciphers import modes\nfrom cryptography.hazmat.backends import default_backend\n\nclass AES_GZIP:\n    @staticmethod\n    def gzip_decode(content):\n        buf = io.BytesIO(content)\n        gf = gzip.GzipFile(fileobj=buf)\n        content = gf.read()\n        return content\n\n    def pwd_decrypt(self, content):\n        key = b&#039;XXXX&#039;\n        iv = b&#039;XXXXX&#039;\n        cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend())\n        decryptor = cipher.decryptor()\n        data = decryptor.update(content)\n        return self.gzip_decode(data)\n<\/code><\/pre>\n<h2>\u516d.SM2\/SM4<\/h2>\n<h3>GMSSL\u6a21\u5757\u4ecb\u7ecd<\/h3>\n<p>GmSSL\u662f\u4e00\u4e2a\u5f00\u6e90\u7684\u52a0\u5bc6\u5305\u7684python\u5b9e\u73b0\uff0c\u652f\u6301SM2\/SM3\/SM4\u7b49\u56fd\u5bc6(\u56fd\u5bb6\u5546\u7528\u5bc6\u7801)\u7b97\u6cd5\u3001\u9879\u76ee\u91c7\u7528\u5bf9\u5546\u4e1a\u5e94\u7528\u53cb\u597d\u7684\u7c7bBSD\u5f00\u6e90\u8bb8\u53ef\u8bc1\uff0c\u5f00\u6e90\u4e14\u53ef\u4ee5\u7528\u4e8e\u95ed\u6e90\u7684\u5546\u4e1a\u5e94\u7528\u3002<\/p>\n<h3>\u5b89\u88c5\u6a21\u5757<\/h3>\n<pre><code>pip install gmssl\n#https:\/\/github.com\/duanhongyi\/gmssl\/blob\/master\/README.md\u5b98\u65b9\u6587\u6863\n<\/code><\/pre>\n<h3>SM2\u7b97\u6cd5<\/h3>\n<p>RSA\u7b97\u6cd5\u7684\u5371\u673a\u5728\u4e8e\u5176\u5b58\u5728\u4e9a\u6307\u6570\u7b97\u6cd5\uff0c\u5bf9ECC\u7b97\u6cd5\u800c\u8a00\u4e00\u822c\u6ca1\u6709\u4e9a\u6307\u6570\u653b\u51fb\u7b97\u6cd5 SM2\u692d\u5706\u66f2\u7ebf\u516c\u94a5\u5bc6\u7801\u7b97\u6cd5\uff1a\u6211\u56fd\u81ea\u4e3b\u77e5\u8bc6\u4ea7\u6743\u7684\u5546\u7528\u5bc6\u7801\u7b97\u6cd5\uff0c\u662fECC\uff08Elliptic Curve Cryptosystem\uff09\u7b97\u6cd5\u7684\u4e00\u79cd\uff0c\u57fa\u4e8e\u692d\u5706\u66f2\u7ebf\u79bb\u6563\u5bf9\u6570\u95ee\u9898\uff0c\u8ba1\u7b97\u590d\u6742\u5ea6\u662f\u6307\u6570\u7ea7\uff0c\u6c42\u89e3\u96be\u5ea6\u8f83\u5927\uff0c\u540c\u7b49\u5b89\u5168\u7a0b\u5ea6\u8981\u6c42\u4e0b\uff0c\u692d\u5706\u66f2\u7ebf\u5bc6\u7801\u8f83\u5176\u4ed6\u516c\u94a5\u7b97\u6cd5\u6240\u9700\u5bc6\u94a5\u957f\u5ea6\u5c0f\u5f88\u591a\u3002<\/p>\n<p>gmssl\u662f\u5305\u542b\u56fd\u5bc6SM2\u7b97\u6cd5\u7684Python\u5b9e\u73b0\uff0c \u63d0\u4f9b\u4e86 <code>encrypt<\/code>\u3001 <code>decrypt<\/code>\u7b49\u51fd\u6570\u7528\u4e8e\u52a0\u5bc6\u89e3\u5bc6\uff0c \u7528\u6cd5\u5982\u4e0b\uff1a<\/p>\n<h4>1. \u521d\u59cb\u5316<code>CryptSM2<\/code><\/h4>\n<pre><code>import base64\nimport binascii\nfrom gmssl import sm2, func\n#16\u8fdb\u5236\u7684\u516c\u94a5\u548c\u79c1\u94a5\nprivate_key = &#039;00B9AB0B828FF68872F21A837FC303668428DEA11DCD1B24429D0C99E24EED83D5&#039;\npublic_key = &#039;B9C9A6E04E9C91F7BA880429273747D7EF5DDEB0BB2FF6317EB00BEF331A83081A6994B8993F3F5D6EADDDB81872266C87C018FB4162F5AF347B483E24620207&#039;\nsm2_crypt = sm2.CryptSM2(\n    public_key=public_key, private_key=private_key)\n<\/code><\/pre>\n<h4>2. <code>encrypt<\/code>\u548c<code>decrypt<\/code><\/h4>\n<pre><code>#\u6570\u636e\u548c\u52a0\u5bc6\u540e\u6570\u636e\u4e3abytes\u7c7b\u578b\ndata = b&quot;111&quot;\nenc_data = sm2_crypt.encrypt(data)\ndec_data =sm2_crypt.decrypt(enc_data)\nassert dec_data == data\n<\/code><\/pre>\n<h4>3.<code>sign<\/code>\u548c<code>verify<\/code><\/h4>\n<pre><code>data = b&quot;111&quot; # bytes\u7c7b\u578b\nrandom_hex_str = func.random_hex(sm2_crypt.para_len)\nsign = sm2_crypt.sign(data, random_hex_str) #  16\u8fdb\u5236\nassert sm2_crypt.verify(sign, data) #  16\u8fdb\u5236\n<\/code><\/pre>\n<h3>SM4\u7b97\u6cd5<\/h3>\n<p>\u56fd\u5bc6SM4(\u65e0\u7ebf\u5c40\u57df\u7f51SMS4)\u7b97\u6cd5\uff0c \u4e00\u4e2a\u5206\u7ec4\u7b97\u6cd5\uff0c \u5206\u7ec4\u957f\u5ea6\u4e3a128bit\uff0c \u5bc6\u94a5\u957f\u5ea6\u4e3a128bit\uff0c \u7b97\u6cd5\u5177\u4f53\u5185\u5bb9\u53c2\u7167<a href=\"https:\/\/drive.google.com\/file\/d\/0B0o25hRlUdXcbzdjT0hrYkkwUjg\/view?usp=sharing\">SM4\u7b97\u6cd5<\/a>\u3002<\/p>\n<p>gmssl\u662f\u5305\u542b\u56fd\u5bc6SM4\u7b97\u6cd5\u7684Python\u5b9e\u73b0\uff0c \u63d0\u4f9b\u4e86 <code>encrypt_ecb<\/code>\u3001 <code>decrypt_ecb<\/code>\u3001 <code>encrypt_cbc<\/code>\u3001 <code>decrypt_cbc<\/code>\u7b49\u51fd\u6570\u7528\u4e8e\u52a0\u5bc6\u89e3\u5bc6\uff0c \u7528\u6cd5\u5982\u4e0b\uff1a<\/p>\n<h4>1. \u521d\u59cb\u5316<code>CryptSM4<\/code><\/h4>\n<pre><code>from gmssl.sm4 import CryptSM4, SM4_ENCRYPT, SM4_DECRYPT\n\nkey = b&#039;3l5butlj26hvv313&#039;\nvalue = b&#039;111&#039; #  bytes\u7c7b\u578b\niv = b&#039;\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00&#039; #  bytes\u7c7b\u578b\ncrypt_sm4 = CryptSM4()\n<\/code><\/pre>\n<h4>2. <code>encrypt_ecb<\/code>\u548c<code>decrypt_ecb<\/code><\/h4>\n<pre><code>crypt_sm4.set_key(key, SM4_ENCRYPT)\nencrypt_value = crypt_sm4.crypt_ecb(value) #  bytes\u7c7b\u578b\ncrypt_sm4.set_key(key, SM4_DECRYPT)\ndecrypt_value = crypt_sm4.crypt_ecb(encrypt_value) #  bytes\u7c7b\u578b\nassert value == decrypt_value\n<\/code><\/pre>\n<h4>3. <code>encrypt_cbc<\/code>\u548c<code>decrypt_cbc<\/code><\/h4>\n<pre><code>crypt_sm4.set_key(key, SM4_ENCRYPT)\nencrypt_value = crypt_sm4.crypt_cbc(iv , value) #  bytes\u7c7b\u578b\ncrypt_sm4.set_key(key, SM4_DECRYPT)\ndecrypt_value = crypt_sm4.crypt_cbc(iv , encrypt_value) #  bytes\u7c7b\u578b\nassert value == decrypt_value\n<\/code><\/pre>\n<h2>\u4e03.\u5176\u4ed6\u4e0d\u600e\u4e48\u9700\u8981\u6a21\u677f\u7684\u52a0\u5bc6<\/h2>\n<h3>1.base64\u52a0\u5bc6<\/h3>\n<pre><code>import base64   #base64\u4e5f\u662f\u7528\u6765\u52a0\u5bc6\u7684\uff0c\u4f46\u662f\u8fd9\u4e2a\u662f\u53ef\u4ee5\u89e3\u5bc6\u7684\ns = &quot;password&quot;\nprint(base64.b64encode(s.encode()) )  #\u52a0\u5bc6\n<\/code><\/pre>\n<h3>2.uuid<\/h3>\n<pre><code>#\u6709\u65f6\u5019\u4f60\u4f1a\u770b\u5230\u4e00\u4e9b\u6bd4\u5982xxxx-xxxx-xxx-xxx\u8bef\u4ee5\u4e3a\u662f\u52a0\u5bc6\u5176\u5b9e\u5f88\u591a\u662fuuid\u6a21\u5757\u81ea\u52a8\u751f\u6210\u7684\n\u968f\u673a\u6570\u683c\u5f0f\u4e3a:xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx\n\npython\u7684uuid\u6a21\u5757\u63d0\u4f9bUUID\u7c7b\u548c\u51fd\u6570uuid1(), uuid3(), uuid4(), uuid5()\n\n1.uuid.uuid1([node[, clock_seq]])\n\u57fa\u4e8e\u65f6\u95f4\u6233\n\n\u4f7f\u7528\u4e3b\u673aID, \u5e8f\u5217\u53f7, \u548c\u5f53\u524d\u65f6\u95f4\u6765\u751f\u6210UUID, \u53ef\u4fdd\u8bc1\u5168\u7403\u8303\u56f4\u7684\u552f\u4e00\u6027. \u4f46\u7531\u4e8e\u4f7f\u7528\u8be5\u65b9\u6cd5\u751f\u6210\u7684UUID\u4e2d\u5305\u542b\u6709\u4e3b\u673a\u7684\u7f51\u7edc\u5730\u5740, \u56e0\u6b64\u53ef\u80fd\u5371\u53ca\u9690\u79c1. \u8be5\u51fd\u6570\u6709\u4e24\u4e2a\u53c2\u6570, \u5982\u679c node \u53c2\u6570\u672a\u6307\u5b9a, \u7cfb\u7edf\u5c06\u4f1a\u81ea\u52a8\u8c03\u7528 getnode() \u51fd\u6570\u6765\u83b7\u53d6\u4e3b\u673a\u7684\u786c\u4ef6\u5730\u5740. \u5982\u679c clock_seq \u53c2\u6570\u672a\u6307\u5b9a\u7cfb\u7edf\u4f1a\u4f7f\u7528\u4e00\u4e2a\u968f\u673a\u4ea7\u751f\u768414\u4f4d\u5e8f\u5217\u53f7\u6765\u4ee3\u66ff.\n\n2.uuid.uuid3(namespace, name)\n\u57fa\u4e8e\u540d\u5b57\u7684MD5\u6563\u5217\u503c\n\n\u901a\u8fc7\u8ba1\u7b97\u547d\u540d\u7a7a\u95f4\u548c\u540d\u5b57\u7684MD5\u6563\u5217\u503c\u6765\u751f\u6210UUID, \u53ef\u4ee5\u4fdd\u8bc1\u540c\u4e00\u547d\u540d\u7a7a\u95f4\u4e2d\u4e0d\u540c\u540d\u5b57\u7684\u552f\u4e00\u6027\u548c\u4e0d\u540c\u547d\u540d\u7a7a\u95f4\u7684\u552f\u4e00\u6027, \u4f46\u540c\u4e00\u547d\u540d\u7a7a\u95f4\u7684\u540c\u4e00\u540d\u5b57\u751f\u6210\u7684UUID\u76f8\u540c.\n\n3.uuid.uuid4()\n\u57fa\u4e8e\u968f\u673a\u6570\n\n\u901a\u8fc7\u968f\u673a\u6570\u6765\u751f\u6210UUID. \u4f7f\u7528\u7684\u662f\u4f2a\u968f\u673a\u6570\u6709\u4e00\u5b9a\u7684\u91cd\u590d\u6982\u7387.\n\n4.uuid.uuid5(namespace, name)\n\u57fa\u4e8e\u540d\u5b57\u7684SHA-1\u6563\u5217\u503c\n<\/code><\/pre>\n<h3>3.md5\u52a0\u76d0<\/h3>\n<pre><code>import hashlib\n\n#\u6ce8\u610f\u52a0\u5bc6\u987a\u5e8f \nm=hashlib.md5(&#039;\u52a0\u5bc6\u5185\u5bb9&#039;.encode(&#039;utf8&#039;))\nm.update(b&quot;\u76d0&quot;)\nsign = m.hexdigest()\n<\/code><\/pre>\n<h3>4.\u5b57\u7b26\u4e32\u548c16\u8fdb\u5236\u5b57\u7b26\u4e32\u4e4b\u95f4\u8f6c\u6362<\/h3>\n<pre><code>import binascii\n\nbinascii.b2a_hex(&#039;\u5b57\u7b26\u4e32&#039;.encode())  \u8f93\u51fab&#039;e5ad97e7aca6e4b8b2&#039;\nbinascii.a2b_hex(&#039;e5ad97e7aca6e4b8b2&#039;).decode()   \u8f93\u51fa &#039;\u5b57\u7b26\u4e32&#039;\n\ndef str_to_hex_x(s):   #\u8f93\u5165\u7bee\u7403,\u8f93\u51fa\n    &#039;&#039;&#039;\n    \u5b57\u7b26\u4e32\u8f6cb&#039;\\xe7\\xaf\\xae\\xe7\\x90\\x83&#039;\n    :param s:\n    :return:\n    &#039;&#039;&#039;\n\n    s = binascii.hexlify(s.encode()).decode()\n    s_list = []\n    for index in range(2,len(s)+2,2):\n        ss = f&quot;x{s[index-2:index]}&quot;\n        s_list.append(ss)\n\n    s_1 = &quot;\\\\&quot;.join(s_list)\n    s_2 = f&#039;b&quot;\\\\{s_1}&quot;&#039;\n    return eval(s_2)\n<\/code><\/pre>\n<h3>5.HmacSHA256\u52a0\u5bc6\u7b97\u6cd5<\/h3>\n<pre><code>from hashlib import sha256\nimport hmac\n\ndef get_sign(data, key):\n    key = key.encode(&#039;utf-8&#039;)\n    message = data.encode(&#039;utf-8&#039;)\n    sign = base64.b64encode(hmac.new(key, message, digestmod=sha256).digest())\n    sign = str(sign, &#039;utf-8&#039;)\n    print(sign)\n    return sign\n<\/code><\/pre>\n<h2>6.\u5b57\u8282\u6570\u7ec4\u8f6c\u5b57\u7b26\u4e32<\/h2>\n<pre><code>a = bytearray(l2)\nb = a.decode(&#039;utf8&#039;)\nprint(b)\n<\/code><\/pre>\n<h2>7.java\u5b57\u8282\u6570\u7ec4\u8f6cpython\u5b57\u8282\u6570\u7ec4<\/h2>\n<pre><code>def jb2pb(byte_arr):\n\n &quot;&quot;&quot;\n java \u5b57\u8282\u6570\u7ec4\u8f6cpython\u5b57\u8282\u6570\u7ec4\n :return:\n &quot;&quot;&quot;\n\n return [i + 256 if i &lt; 0 else i for i in byte_arr]\n<\/code><\/pre>\n<p>\u672c\u6587\u8f6c\u81ea <a href=\"https:\/\/www.cnblogs.com\/pythonywy\/p\/13999474.html\">https:\/\/www.cnblogs.com\/pythonywy\/p\/13999474.html<\/a>\uff0c\u5982\u6709\u4fb5\u6743\uff0c\u8bf7\u8054\u7cfb\u5220\u9664\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u90fd\u662f\u4f5c\u8005\u7d2f\u79ef\u7684,\u4e14\u770b\u5176\u73cd\u60dc,\u5927\u5bb6\u53ef\u4ee5\u5c3d\u91cf\u53ef\u4ee5\u4fdd\u5b58\u4e00\u4e0b,\u5982\u679c\u8f6c\u8f7d\u8bf7\u5199\u597d\u51fa\u5904https:\/\/www.cnblogs.com\/pythonyw   \u2026 &#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0},"categories":[130],"tags":[],"_links":{"self":[{"href":"\/index.php?rest_route=\/wp\/v2\/posts\/1543"}],"collection":[{"href":"\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1543"}],"version-history":[{"count":1,"href":"\/index.php?rest_route=\/wp\/v2\/posts\/1543\/revisions"}],"predecessor-version":[{"id":1544,"href":"\/index.php?rest_route=\/wp\/v2\/posts\/1543\/revisions\/1544"}],"wp:attachment":[{"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1543"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1543"},{"taxonomy":"post_tag","embeddable":true,"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1543"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}