{ "info": { "author": "duanhongyi", "author_email": "duanhyi@gmail.com", "bugtrack_url": null, "classifiers": [], "description": "GMSSL\n========\nGmSSL\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\n\n### SM2\u7b97\u6cd5\nRSA\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\nSM2\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\n\ngmssl\u662f\u5305\u542b\u56fd\u5bc6SM2\u7b97\u6cd5\u7684Python\u5b9e\u73b0\uff0c \u63d0\u4f9b\u4e86 `encrypt`\u3001 `decrypt`\u7b49\u51fd\u6570\u7528\u4e8e\u52a0\u5bc6\u89e3\u5bc6\uff0c \u7528\u6cd5\u5982\u4e0b\uff1a\n\n#### 1. \u521d\u59cb\u5316`CryptSM2`\n\n```python\nimport base64\nimport binascii\nfrom gmssl import sm2, func\nprivate_key = '00B9AB0B828FF68872F21A837FC303668428DEA11DCD1B24429D0C99E24EED83D5'\npublic_key = 'B9C9A6E04E9C91F7BA880429273747D7EF5DDEB0BB2FF6317EB00BEF331A83081A6994B8993F3F5D6EADDDB81872266C87C018FB4162F5AF347B483E24620207'\nsm2_crypt = sm2.CryptSM2(\n public_key=public_key, private_key=private_key)\n```\n\n#### 2. `encrypt`\u548c`decrypt`\n\n```python\ndata = b\"111\"\nenc_data = sm2_crypt.encrypt(data)\ndec_data =sm2_crypt.decrypt(enc_data)\nassert dec_data == data\n```\n\n#### 3. `sign`\u548c`verify`\n```python\ndata = b\"111\"\nrandom_hex_str = func.random_hex(sm2_crypt.para_len)\nsign = sm2_crypt.sign(data, random_hex_str)\nassert sm2_crypt.verify(sign, data)\n```\n\n### SM4\u7b97\u6cd5\n\n\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\n\u7b97\u6cd5\u5177\u4f53\u5185\u5bb9\u53c2\u7167[SM4\u7b97\u6cd5](https://drive.google.com/file/d/0B0o25hRlUdXcbzdjT0hrYkkwUjg/view?usp=sharing)\u3002\n\ngmssl\u662f\u5305\u542b\u56fd\u5bc6SM4\u7b97\u6cd5\u7684Python\u5b9e\u73b0\uff0c \u63d0\u4f9b\u4e86 `encrypt_ecb`\u3001 `decrypt_ecb`\u3001 `encrypt_cbc`\u3001\n`decrypt_cbc`\u7b49\u51fd\u6570\u7528\u4e8e\u52a0\u5bc6\u89e3\u5bc6\uff0c \u7528\u6cd5\u5982\u4e0b\uff1a\n\n#### 1. \u521d\u59cb\u5316`CryptSM4`\n\n```python\nfrom gmssl.sm4 import CryptSM4, SM4_ENCRYPT, SM4_DECRYPT\n\nkey = b'3l5butlj26hvv313'\nvalue = b'111'\niv = b'\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00'\ncrypt_sm4 = CryptSM4()\n```\n\n#### 2. `encrypt_ecb`\u548c`decrypt_ecb`\n\n```python\n\ncrypt_sm4.set_key(key, SM4_ENCRYPT)\nencrypt_value = crypt_sm4.crypt_ecb(value)\ncrypt_sm4.set_key(key, SM4_DECRYPT)\ndecrypt_value = crypt_sm4.crypt_ecb(encrypt_value)\nassert value == decrypt_value\n\n```\n\n#### 3. `encrypt_cbc`\u548c`decrypt_cbc`\n\n```python\n\ncrypt_sm4.set_key(key, SM4_ENCRYPT)\nencrypt_value = crypt_sm4.crypt_cbc(iv , value)\ncrypt_sm4.set_key(key, SM4_DECRYPT)\ndecrypt_value = crypt_sm4.crypt_cbc(iv , encrypt_value)\nassert value == decrypt_value\n\n```", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/duanhongyi/gmssl", "keywords": "", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "gmssl", "package_url": "https://pypi.org/project/gmssl/", "platform": "all platform", "project_url": "https://pypi.org/project/gmssl/", "project_urls": { "Homepage": "https://github.com/duanhongyi/gmssl" }, "release_url": "https://pypi.org/project/gmssl/3.2.1/", "requires_dist": null, "requires_python": "", "summary": "Pure-Python SM2/SM3/SM4 implementation", "version": "3.2.1" }, "last_serial": 4089697, "releases": { "3.2.1": [ { "comment_text": "", "digests": { "md5": "c6813324b1163777b1b3bef3f94cde1a", "sha256": "57e7fe01da9f9337e754ad30bf6fbb8e4744615eb4aee6ecd777d37ccf348530" }, "downloads": -1, "filename": "gmssl-3.2.1.tar.gz", "has_sig": false, "md5_digest": "c6813324b1163777b1b3bef3f94cde1a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9328, "upload_time": "2018-07-22T04:56:31", "url": "https://files.pythonhosted.org/packages/06/b7/06a368de8bb7394c8e8f55d9b1e2be9f0f95d1383b1f9f5aa761f6d5fe00/gmssl-3.2.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c6813324b1163777b1b3bef3f94cde1a", "sha256": "57e7fe01da9f9337e754ad30bf6fbb8e4744615eb4aee6ecd777d37ccf348530" }, "downloads": -1, "filename": "gmssl-3.2.1.tar.gz", "has_sig": false, "md5_digest": "c6813324b1163777b1b3bef3f94cde1a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9328, "upload_time": "2018-07-22T04:56:31", "url": "https://files.pythonhosted.org/packages/06/b7/06a368de8bb7394c8e8f55d9b1e2be9f0f95d1383b1f9f5aa761f6d5fe00/gmssl-3.2.1.tar.gz" } ] }