{"id":657,"date":"2025-01-23T15:43:00","date_gmt":"2025-01-23T07:43:00","guid":{"rendered":"http:\/\/101.43.65.133:8899\/?p=657"},"modified":"2025-07-21T15:53:32","modified_gmt":"2025-07-21T07:53:32","slug":"%e5%9b%bd%e5%af%86sm2-3-4-java-php","status":"publish","type":"post","link":"http:\/\/101.43.65.133:8899\/?p=657","title":{"rendered":"\u56fd\u5bc6SM2\/3\/4 JAVA &amp; PHP\u4e92\u901a"},"content":{"rendered":"<div id=\"bsf_rt_marker\"><\/div>\n<h2 class=\"wp-block-heading\">\u80cc\u666f\u77e5\u8bc6<\/h2>\n\n\n\n<p>\u56fd\u5bc6\u5373\u56fd\u5bb6\u5bc6\u7801\u5c40\u8ba4\u5b9a\u7684\u56fd\u4ea7\u5bc6\u7801\u7b97\u6cd5\u3002\u4e3b\u8981\u6709SM1\uff0cSM2\uff0cSM3\uff0cSM4\u3002\u5bc6\u94a5\u957f\u5ea6\u548c\u5206\u7ec4\u957f\u5ea6\u5747\u4e3a128\u4f4d\u3002\u56fd\u5bc6\u7b97\u6cd5\u662f\u6307\u56fd\u5bb6\u5bc6\u7801\u7ba1\u7406\u5c40\u8ba4\u5b9a\u7684\u4e00\u7cfb\u5217\u56fd\u4ea7\u5bc6\u7801\u7b97\u6cd5\uff0c\u5305\u62ecSM1-SM9\u4ee5\u53caZUC\u7b49\u3002\u5176\u4e2d<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>SM1\u3001SM4\u3001SM5\u3001SM6\u3001SM7\u3001SM8\u3001ZUC\u7b49\u5c5e\u4e8e\u5bf9\u79f0\u5bc6\u7801<\/li>\n\n\n\n<li>SM2\u3001SM9\u7b49\u5c5e\u4e8e\u516c\u94a5\u5bc6\u7801 (\u975e\u5bf9\u79f0\u52a0\u5bc6)<\/li>\n\n\n\n<li>SM3\u5c5e\u4e8e\u5355\u5411\u6563\u5217\u51fd\u6570\u3002<\/li>\n<\/ul>\n\n\n\n<p>\u76ee\u524d\u6211\u56fd\u4e3b\u8981\u4f7f\u7528\u516c\u5f00\u7684SM2\u3001SM3\u3001SM4\u4f5c\u4e3a\u5546\u7528\u5bc6\u7801\u7b97\u6cd5\u3002 \u5176\u4e2dSM1\u3001SM7\u7b97\u6cd5\u4e0d\u516c\u5f00\uff0c\u8c03\u7528\u8be5\u7b97\u6cd5\u65f6\uff0c\u9700\u8981\u901a\u8fc7\u52a0\u5bc6\u82af\u7247\u7684\u63a5\u53e3\u8fdb\u884c\u8c03\u7528.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>SM2\u662f\u57fa\u4e8e\u692d\u5706\u66f2\u7ebf\u7684\u516c\u94a5\u5bc6\u7801\u7b97\u6cd5\uff0c\u5305\u62ec\u7528\u4e8e\u6570\u5b57\u7b7e\u540d\u7684SM2-1\u3001\u7528\u4e8e\u5bc6\u94a5\u4ea4\u6362\u7684SM2-2\u548c\u7528\u4e8e\u516c\u94a5\u5bc6\u7801\u7684SM2-3\u3002<\/li>\n\n\n\n<li>SM3\u662f\u80fd\u591f\u8ba1\u7b97\u51fa256\u6bd4\u7279\u7684\u6563\u5217\u503c\u7684\u5355\u5411\u6563\u5217\u51fd\u6570\uff0c\u4e3b\u8981\u7528\u4e8e\u6570\u5b57\u7b7e\u540d\u548c\u6d88\u606f\u8ba4\u8bc1\u7801\u3002<\/li>\n\n\n\n<li>SM4\u662f\u5c5e\u4e8e\u5bf9\u79f0\u5bc6\u7801\u7684\u4e00\u79cd\u5206\u7ec4\u5bc6\u7801\u7b97\u6cd5\uff0c\u5206\u7ec4\u957f\u5ea6\u548c\u5bc6\u94a5\u957f\u5ea6\u5747\u4e3a128\u6bd4\u7279\u3002<\/li>\n<\/ul>\n\n\n\n<p>\u4f7f\u7528\u7ecf\u9a8c<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4e00\u822c\u6570\u636e\u53d1\u9001\u7aef\u90fd\u662f\u7528SM4\u5bf9\u6570\u636e\u5185\u5bb9\u52a0\u5bc6\uff0c\u4f7f\u7528SM3\u5bf9\u5185\u5bb9\u8fdb\u884c\u6458\u8981\uff0c\u518d\u4f7f\u7528SM2\u5bf9\u6458\u8981\u8fdb\u884c\u7b7e\u540d\u3002<\/li>\n\n\n\n<li>\u4e00\u822c\u63a5\u6536\u7aef\uff0c\u5148\u7528SM2\u5bf9\u6458\u8981\u8fdb\u884c\u9a8c\u7b7e\uff0c\u9a8c\u7b7e\u6210\u529f\u540e\u5c31\u505a\u5230\u4e86\u9632\u62b5\u8d56\uff0c\u5bf9\u53d1\u9001\u8fc7\u6765\u7684\u5185\u5bb9\u8fdb\u884cSM3\u6458\u8981\uff0c\u770b\u4e0b\u751f\u6210\u7684\u6458\u8981\u548c\u9a8c\u7b7e\u540e\u7684\u6458\u8981\u662f\u5426\u4e00\u81f4\uff0c\u7528\u4e8e\u9632\u7be1\u6539\u3002<\/li>\n\n\n\n<li>\u53e6\u5916SM4\u5728\u52a0\u5bc6\u89e3\u5bc6\u9700\u8981\u76f8\u540c\u7684\u5bc6\u94a5\uff0c\u8fd9\u4e2a\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u5bc6\u94a5\u4ea4\u6362\u6a21\u5757\u5b9e\u73b0\u751f\u6210\u76f8\u540c\u7684\u5bc6\u94a5\u3002\u7528\u4e8eSM4\u5bf9\u79f0\u52a0\u5bc6\u3002<\/li>\n<\/ul>\n\n\n\n<p>\u5173\u4e8e\u975e\u5bf9\u79f0\u8fd8\u8981\u6ce8\u610f\u51e0\u70b9\uff1a<\/p>\n\n\n\n<p>\uff081\uff09\u516c\u94a5\u662f\u901a\u8fc7\u79c1\u94a5\u4ea7\u751f\u7684\uff1b<\/p>\n\n\n\n<p>\uff082\uff09\u516c\u94a5\u52a0\u5bc6\uff0c\u79c1\u94a5\u89e3\u5bc6\u662f\u52a0\u5bc6\u7684\u8fc7\u7a0b<\/p>\n\n\n\n<p>\uff083\uff09\u79c1\u94a5\u52a0\u5bc6\uff0c\u516c\u94a5\u89e3\u5bc6\u662f\u7b7e\u540d\u7684\u8fc7\u7a0b\uff1b<\/p>\n\n\n\n<p>\u7531\u4e8eSM1\u3001SM4\u52a0\u89e3\u5bc6\u7684\u5206\u7ec4\u5927\u5c0f\u4e3a128bit\uff0c\u6545\u5bf9\u6d88\u606f\u8fdb\u884c\u52a0\u89e3\u5bc6\u65f6\uff0c\u82e5\u6d88\u606f\u957f\u5ea6\u8fc7\u957f\uff0c\u9700\u8981\u8fdb\u884c\u5206\u7ec4\uff0c\u8981\u6d88\u606f\u957f\u5ea6\u4e0d\u8db3\uff0c\u5219\u8981\u8fdb\u884c\u586b\u5145\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>SM2\u7b97\u6cd5\uff1a(\u975e\u5bf9\u79f0\u52a0\u5bc6)<\/p>\n\n\n\n<p>SM2\u53ef\u4ee5\u7406\u89e3\u4e3a\u56fd\u4ea7RSA\u3002\u975e\u5bf9\u79f0\u52a0\u5bc6\uff0c\u57fa\u4e8eECC\u3002\u8be5\u7b97\u6cd5\u5df2\u516c\u5f00\u3002\u7531\u4e8e\u8be5\u7b97\u6cd5\u57fa\u4e8eECC\uff0c\u6545\u5176\u7b7e\u540d\u901f\u5ea6\u4e0e\u79d8\u94a5\u751f\u6210\u901f\u5ea6\u90fd\u5feb\u4e8eRSA\u3002<\/p>\n\n\n\n<p>SM2\u692d\u5706\u66f2\u7ebf\u516c\u94a5\u5bc6\u7801\u7b97\u6cd5\u662f\u6211\u56fd\u81ea\u4e3b\u8bbe\u8ba1\u7684\u516c\u94a5\u5bc6\u7801\u7b97\u6cd5\uff0c\u5305\u62ecSM2-1\u692d\u5706\u66f2\u7ebf\u6570\u5b57\u7b7e\u540d\u7b97\u6cd5\uff0cSM2-2\u692d\u5706\u66f2\u7ebf\u5bc6\u94a5\u4ea4\u6362\u534f\u8bae\uff0cSM2-3\u692d\u5706\u66f2\u7ebf\u516c\u94a5\u52a0\u5bc6\u7b97\u6cd5\uff0c\u5206\u522b\u7528\u4e8e\u5b9e\u73b0\u6570\u5b57\u7b7e\u540d\u5bc6\u94a5\u534f\u5546\u548c<a href=\"https:\/\/links.jianshu.com\/go?to=https%3A%2F%2Fcloud.tencent.com%2Fsolution%2Fdomesticencryption%3Ffrom_column%3D20065%26from%3D20065\" target=\"_blank\" rel=\"noreferrer noopener\">\u6570\u636e\u52a0\u5bc6<\/a>\u7b49\u529f\u80fd\u3002SM2\u7b97\u6cd5\u4e0eRSA\u7b97\u6cd5\u4e0d\u540c\u7684\u662f\uff0cSM2\u7b97\u6cd5\u662f\u57fa\u4e8e\u692d\u5706\u66f2\u7ebf\u4e0a\u70b9\u7fa4\u79bb\u6563\u5bf9\u6570\u96be\u9898\uff0c\u76f8\u5bf9\u4e8eRSA\u7b97\u6cd5\uff0c256\u4f4d\u7684SM2\u5bc6\u7801\u5f3a\u5ea6\u5df2\u7ecf\u6bd42048\u4f4d\u7684RSA\u5bc6\u7801\u5f3a\u5ea6\u8981\u9ad8\uff0c\u4f46\u8fd0\u7b97\u901f\u5ea6\u5feb\u4e8eRSA\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">JAVA \u670d\u52a1\u7aef<\/h2>\n\n\n\n<p><a href=\"https:\/\/links.jianshu.com\/go?to=https%3A%2F%2Fcloud.tencent.com%2Fdeveloper%2Farticle%2F2421525\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/cloud.tencent.com\/developer\/article\/2421525<\/a><\/p>\n\n\n\n<p>Hutool\u9488\u5bf9Bouncy Castle\u505a\u4e86\u7b80\u5316\u5305\u88c5\uff0c\u7528\u4e8e\u5b9e\u73b0\u56fd\u5bc6\u7b97\u6cd5\u4e2d\u7684SM2\u3001SM3\u3001SM4\u3002<br>\u56fd\u5bc6\u7b97\u6cd5\u5de5\u5177\u5c01\u88c5\u5305\u62ec\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u975e\u5bf9\u79f0\u52a0\u5bc6\u548c\u7b7e\u540d\uff1aSM2<\/li>\n\n\n\n<li>\u6458\u8981\u7b7e\u540d\u7b97\u6cd5\uff1aSM3<\/li>\n\n\n\n<li>\u5bf9\u79f0\u52a0\u5bc6\uff1aSM4<br>\u56fd\u5bc6\u7b97\u6cd5\u9700\u8981\u5f15\u5165Bouncy Castle\u5e93\u7684\u4f9d\u8d56\u3002<br>MVN pom.xml\u914d\u7f6e\u6587\u4ef6\u589e\u52a0\u4f9d\u8d56\uff1a<\/li>\n\n\n\n<li>\u8bf4\u660e bcprov-jdk15to18\u7684\u7248\u672c\u8bf7\u524d\u5f80Maven\u4e2d\u592e\u5e93\u641c\u7d22\uff0c\u67e5\u627e\u5bf9\u5e94JDK\u7684\u6700\u65b0\u7248\u672c\u3002<\/li>\n<\/ul>\n\n\n\n<p>\u7b14\u8005\u91c7\u7528\u4ee5\u4e0b2\u4e2aJAR\u5305\uff08JAVA1.8\uff09<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"296\" height=\"137\" src=\"http:\/\/101.43.65.133:8899\/wp-content\/uploads\/2025\/07\/\u5fae\u4fe1\u622a\u56fe_20250721154436.jpg\" alt=\"\" class=\"wp-image-658\"\/><\/figure>\n\n\n\n<p>image.png<\/p>\n\n\n\n<p>Maven\u914d\u7f6e\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;dependency&gt;\n  &lt;groupId&gt;org.bouncycastle&lt;\/groupId&gt;\n  &lt;artifactId&gt;bcprov-jdk15to18&lt;\/artifactId&gt;\n  &lt;version&gt;1.69&lt;\/version&gt;\n&lt;\/dependency&gt;\n<\/code><\/pre>\n\n\n\n<p>SM3HMAC\u7b97\u6cd5\uff1a\uff08JAVA\u4e2d\u4f7f\u7528Hutool\u5e93\u5b9e\u73b0\uff0c\u4f46\u5728\u5176\u4ed6\u8bed\u8a00\u4e0d\u4e00\u5b9a\u6709\u73b0\u6210\u5e93\uff0c\u9700\u8981\u8f6c\u5199\u8be5\u903b\u8f91\uff09<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public static void main(String&#91;] args) {\n    \/\/ String  json = \"appId=7f0d19a89e1558cb&amp;data={}&amp;encType=SM4&amp;requestId=1&amp;signType=SM3&amp;timestamp=1719017974&amp;transType=PERSON&amp;version=1.0.0&amp;key=7f0d19a89e1558cb\";\n    String  json = \"appId=7f0d19a89e1558cb&amp;data={\\\"cardId\\\":\\\"\\\",\\\"certNo\\\":\\\"320723199210042814\\\",\\\"certType\\\":\\\"01\\\"}&amp;encType=SM4&amp;requestId=1&amp;signType=SM3&amp;timestamp=1719215443112&amp;transType=APP&amp;version=1.0.0&amp;key=7f0d19a89e1558cb\";\n    String d = Sm3Utils.encryptKey(\"ALpyMppfcUJfN7ttrFvrPWMT0SV8rCvOorbAKVITtfPj\",json);\n    System.out.println(\"@@@encryptKey:\"+d);\n  }\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>import java.io.UnsupportedEncodingException;\nimport java.security.Security;\nimport java.util.Arrays;\nimport org.bouncycastle.crypto.digests.SM3Digest;\nimport org.bouncycastle.crypto.macs.HMac;\nimport org.bouncycastle.crypto.params.KeyParameter;\n\nimport org.bouncycastle.jce.provider.BouncyCastleProvider;\nimport org.bouncycastle.pqc.math.linearalgebra.ByteUtils;\n\npublic class Sm3Utils {\n    \n\/**\n * sm3\u7b97\u6cd5\u52a0\u5bc6(SM3HMAC)\n *\n * @param sm3Key \u52a0\u5bc6\u79d8\u94a5\n * @param paramStr \u5f85\u52a0\u5bc6\u5b57\u7b26\u4e32\n * @return \u8fd4\u56de\u52a0\u5bc6\u540e\uff0c\u56fa\u5b9a\u957f\u5ea6=32\u768416\u8fdb\u5236\u5b57\u7b26\u4e32\n * @explain\n *\/\npublic static String encryptKey(String sm3Key, String paramStr) {\n    \/\/ \u5c06\u8fd4\u56de\u7684hash\u503c\u8f6c\u6362\u621016\u8fdb\u5236\u5b57\u7b26\u4e32\n    String resultHexString = \"\";\n    try {\n        \/\/ \u5c06\u5b57\u7b26\u4e32\u8f6c\u6362\u6210byte\u6570\u7ec4\n        byte&#91;] srcData = paramStr.getBytes(ENCODING);\n        \/\/ \u8c03\u7528hash()\n        byte&#91;] strKey = sm3Key.getBytes();\n        byte&#91;] resultHash = hmac(strKey, srcData);\n        \/\/ \u5c06\u8fd4\u56de\u7684hash\u503c\u8f6c\u6362\u621016\u8fdb\u5236\u5b57\u7b26\u4e32\n        resultHexString = ByteUtils.toHexString(resultHash);\n    } catch (UnsupportedEncodingException e) {\n        e.printStackTrace();\n    }\n      System.out.println(\"SM3\u79d8\u94a5{}\"+sm3Key);\/\/ true\n    return resultHexString;\n}\n}\n<\/code><\/pre>\n\n\n\n<p>SM4\u52a0\u89e3\u5bc6\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/**\n * sm4\u52a0\u5bc6\n *\n * @param chnlId  \u6e20\u9053id\n * @param sm4key  \u6e20\u9053sm4\u5bc6\u94a5\n * @param message \u5f85\u52a0\u5bc6\u62a5\u6587\n * @return \u52a0\u5bc6\u540e\u7684\u62a5\u6587\u5185\u5bb9 String\n * @throws Exception\n *\/\npublic static String sm4Encrypt(String chnlId, String sm4key, String message) throws Exception {\n    \/\/\u7528appId\u52a0\u5bc6appSecret\u83b7\u53d6\u65b0\u79d8\u94a5\n    byte&#91;] appSecretEncData = EasyGmUtils.sm4Encrypt(chnlId.substring(0, 16).getBytes(\"UTF-8\"), sm4key.getBytes(\"UTF-8\"));\n    byte&#91;] secKey = Hex.toHexString(appSecretEncData).toUpperCase().substring(0, 16).getBytes(\"UTF-8\");\n    System.out.println(\"NEWKEY:\"+Hex.toHexString(appSecretEncData).toUpperCase());\n    System.out.println(\"NEWKEY-16:\"+Hex.toHexString(appSecretEncData).toUpperCase().substring(0, 16));\n    \/\/\u52a0\u5bc6\u6570\u636e\n    String  sEn =  Hex.toHexString(EasyGmUtils.sm4Encrypt(secKey, message.getBytes(\"UTF-8\"))).toUpperCase();\n    return sEn;\n}\n\n\/**\n * sm4\u89e3\u5bc6\n *\n * @param chnlId  \u6e20\u9053id\n * @param sm4key  \u6e20\u9053sm4\u5bc6\u94a5\n * @param message \u5f85\u89e3\u5bc6\u62a5\u6587\n * @return \u89e3\u5bc6\u540e\u7684\u62a5\u6587 String\n * @throws Exception\n *\/\npublic static String sm4Decrypt(String chnlId, String sm4key, String message) throws Exception {\n    \/\/\u751f\u4ea7\u89e3\u5bc6key\n    byte&#91;] appSecretEncDataDecode = EasyGmUtils.sm4Encrypt(chnlId.substring(0, 16).getBytes(\"UTF-8\"), sm4key.getBytes(\"UTF-8\"));\n    byte&#91;] secKeyDecode = Hex.toHexString(appSecretEncDataDecode).toUpperCase().substring(0, 16).getBytes(\"UTF-8\");\n    System.out.println(\"NEWKEY:\"+Hex.toHexString(appSecretEncDataDecode).toUpperCase());\n\n    \/\/ return new String(EasyGmUtils.sm4Decrypt(secKeyDecode, message.getBytes(\"UTF-8\")));\n    return new String(EasyGmUtils.sm4Decrypt(secKeyDecode, Hex.decode(message)), StandardCharsets.UTF_8);\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">PHP \u5ba2\u6237\u7aef<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>&lt;?php<\/strong>\nrequire_once '..\/vendor\/autoload.php';\nuse Rtgm\\sm\\RtSm2;\n\n$publicKey = '043d9d4cc71a285af936b36880fd4d6155c22957cd2c84ea313469065207fb951b9ef1db79d69af8886e91e833da1ebc6bfdde86e70f52923d6e042eaa147624c7'; \/\/ \u516c\u94a5\n$privateKey = 'a7763cd4fe7db2a2146fc09bf2d5e5a30e10c51b7e4bed00b3a26ec79ba78ff3'; \/\/ \u79c1\u94a5\n$publicfile = \".\/data\/sm2pub.pem\";\n$privatefile = \".\/data\/sm2.pem\";\n$userId = '1234567812345678';\n$document = \"\u6211\u7231\u4f60ILOVEYOU!\";\n\ndefine('GK',1);\ndefine('SIGN',1);\ndefine('SIGNPEM',1);\n\/\/\u8fd4\u56de\u7684\u7b7e\u540d16\u8fdb\u5236\u8fd8\u662fbase64, \u76ee\u524d\u53ef\u9009hex,\u4e0ebase64\u4e24\u79cd\n\/\/ __construct($formatSign='hex', $randFixed = true) \n$sm2 = new RtSm2('base64',true);\n\n\nif(GK){\n    echo \"\\n----------\u751f\u6210\u660e\u6587\u5bc6\u94a5\u5bf9--------------------------\\n\";\n    print_r($sm2-&gt;generatekey()); \/\/\u751f\u6210\u660e\u6587\u5bc6\u94a5\n    echo \"\\n----------\u751f\u6210pem\u5bc6\u94a5\u5bf9--------------------------\\n\";\n    print_r($sm2-&gt;generatePemkey()); \/\/\u751f\u6210pem\u5bc6\u94a5\uff0c\u8bf7\u653e\u5230\u76f8\u5e94\u7684\u6587\u4ef6\u4e2d\n}\n\nif(SIGN){\n    echo \"\\n---------\u660e\u6587\u5bc6\u94a5\u7b7e\u540d---------------------------\\n\";\n    $sign = $sm2-&gt;doSign( $document, $privateKey, $userId);\n    print_r($sign);\n    echo \"\\n---------\u660e\u6587\u5bc6\u94a5\u9a8c\u7b7e---------------------------\\n\";\n    var_dump($sm2-&gt;verifySign( $document, $sign, $publicKey, $userId ));\n}\n\nif(SIGNPEM){\n    echo \"\\n---------PEM\u5bc6\u94a5\u7b7e\u540d---------------------------\\n\";\n    $sign = $sm2-&gt;doSignOutKey( $document, $privatefile, $userId);\n    print_r($sign);\n    echo \"\\n---------PEM\u5bc6\u94a5\u9a8c\u7b7e---------------------------\\n\";\n    var_dump($sm2-&gt;verifySignOutKey( $document, $sign, $publicfile, $userId ));\n}\n<\/code><\/pre>\n\n\n\n<p>SM3\u7b97\u6cd5:<br>SM3\u53ef\u4ee5\u7406\u89e3\u4e3a\u56fd\u4ea7MD5\u3002\u6d88\u606f\u6458\u8981\u3002\u53ef\u4ee5\u7528MD5\u4f5c\u4e3a\u5bf9\u6bd4\u7406\u89e3\u3002\u8be5\u7b97\u6cd5\u5df2\u516c\u5f00\u3002\u6821\u9a8c\u7ed3\u679c\u4e3a256\u4f4d\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>&lt;?php<\/strong>\nrequire_once '..\/vendor\/autoload.php';\nuse Rtgm\\sm\\RtSm3;\n$sm3 = new RtSm3();\n$data = '\u6211\u7231\u4f60ILOVEYOU!';\nprint_r($sm3-&gt;digest($data,1));\n<\/code><\/pre>\n\n\n\n<p>SM3HMAC\u7b97\u6cd5PHP\u5b9e\u73b0\uff1a\uff08\u7406\u89e3JAVA\u4e2dSM3HMAC\u7b97\u6cd5\uff0c\u4f7f\u7528PHP\u65b9\u6cd5\u8fdb\u884c\u8f6c\u5199\uff09<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u9700\u8981\u5b9e\u73b0hamc-sm3\u56fd\u5bc6\u5b9a\u5236\u7b97\u6cd5\n\/\/ composer require axios\/tools\n\/\/ @see https:\/\/github.com\/AxiosLeo\/php-tools\/tree\/cd576f058db7b633750d62bb6d7d1840f0ab8d5e\n\n$hmac = new HMac();\n$hmac-&gt;registerAlgorithm('sm3', function ($str) {\n  \/\/ SM3\u7b7e\u540d\u51fd\u6570\n  $sm3 = new SM3();\n  $sm3-&gt;encode($str);\n  return $sm3-&gt;getHex();\n });\n$s_crypto= $hmac-&gt;count('sm3', $s_return, $this-&gt;Prvkey);\n<\/code><\/pre>\n\n\n\n<p>SM4\u7b97\u6cd5\uff1a\u5bf9\u79f0\u52a0\u5bc6\uff1a<br>\u53ef\u4ee5\u7406\u89e3\u4e3a\u56fd\u4ea7AES\u3002\u65e0\u7ebf\u5c40\u57df\u7f51\u6807\u51c6\u7684\u5206\u7ec4\u6570\u636e\u7b97\u6cd5\u3002\u5bf9\u79f0\u52a0\u5bc6\uff0c\u5bc6\u94a5\u957f\u5ea6\u548c\u5206\u7ec4\u957f\u5ea6\u5747\u4e3a128\u4f4d\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>&lt;?php<\/strong>\nrequire_once '..\/vendor\/autoload.php';\nuse Rtgm\\sm\\RtSm4;\n\n$key = \"0123456789abcdef\";\n$iv = '1234567887654321';\n\n$sm4 = new RtSm4($key);\n\n$data = '\u62111\u7231\u4f60ILOVEYOU!!!';\n$data = str_repeat('abc',7);\n\/\/sm4 \u7684ecb \u4e0ecbc\u52a0\u5bc6\u6709\u8865\u9f50\uff0816*n\uff09l\n\/\/ sm4-&gt;encrypt($data, $type = 'sm4', $iv = '', $format = 'hex')\n\/\/  openssl_encrypt ,\u548c\u670d\u52a1\u5668openssl\u7248\u672c\uff0cPHP\u7248\u672c\u6709\u5173\uff0c\u6709\u4e9b\u670d\u52a1\u5668\u53ef\u80fd\u4e0d\u652f\u6301sm4-* \u76f8\u5173\u7684\u5bf9\u79f0\u52a0\u5bc6\u7b97\u6cd5\uff0c\n\necho \"==== test sm4 sm4-cbc============\";\necho \"\\nphp sm4:     \".$hex = $sm4-&gt;encrypt($data,'sm4',$iv); \/\/default is cbc\necho \"\\nphp decode:  \".$sm4-&gt;decrypt($hex,'sm4',$iv,'hex');\n\necho \"\\n==== test sm4-ecb============\";\necho \"\\nphp sm4-ecb: \".$hex = $sm4-&gt;encrypt($data,'sm4-ecb');\necho \"\\nphp decode:  \".$sm4-&gt;decrypt($hex,'sm4-ecb','','hex');\n\necho \"\\n==== test sm4-ofb============\";\necho \"\\nphp sm4-ofb: \".$hex = $sm4-&gt;encrypt($data,'sm4-ofb',$iv);\necho \"\\nphp decode:  \".$sm4-&gt;decrypt($hex,'sm4-ofb',$iv,'hex');\n\necho \"\\n==== test sm4-cfb============\";\necho \"\\nphp sm4-cfb: \".$hex = $sm4-&gt;encrypt($data,'sm4-cfb',$iv);\necho \"\\nphp decode:  \".$sm4-&gt;decrypt($hex,'sm4-cfb',$iv,'hex');\n\necho \"\\n==== test sm4-ctr============\";\necho \"\\nphp sm4-ctr: \".$hex = $sm4-&gt;encrypt($data,'sm4-ctr',$iv);\necho \"\\nphp decode:  \".$sm4-&gt;decrypt($hex,'sm4-ctr',$iv,'hex');\n<\/code><\/pre>\n\n\n\n<p>\u53c2\u8003\u6587\u6863\uff1a<br><a href=\"https:\/\/links.jianshu.com\/go?to=https%3A%2F%2Flearnku.com%2Farticles%2F68557\" target=\"_blank\" rel=\"noreferrer noopener\">\u56fd\u5bc6\u62db\u5546\u94f6\u884c\u5bf9\u63a5 | Laravel China \u793e\u533a (learnku.com)<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/links.jianshu.com\/go?to=https%3A%2F%2Fgithub.com%2Flpilp%2Fphpsm2sm3sm4\" target=\"_blank\" rel=\"noreferrer noopener\">lpilp\/phpsm2sm3sm4: php\u7248\u672c\uff0c\u652f\u6301\u56fd\u5bc6SM2\u7684\u7b7e\u540d\u7b97\u6cd5\uff0c\u975e\u5bf9\u79f0\u52a0\u89e3\u5bc6\uff0cSM3\u7684hash, SM4\u7684\u5bf9\u79f0\u52a0\u89e3\u5bc6 (github.com)<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/cloud.tencent.com\/developer\/article\/2421525\">https:\/\/cloud.tencent.com\/developer\/article\/2421525<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u80cc\u666f\u77e5\u8bc6 \u56fd\u5bc6\u5373\u56fd\u5bb6\u5bc6\u7801\u5c40\u8ba4\u5b9a\u7684\u56fd\u4ea7\u5bc6\u7801\u7b97\u6cd5\u3002\u4e3b\u8981\u6709SM1\uff0cSM2\uff0cSM3\uff0cSM4\u3002\u5bc6\u94a5\u957f\u5ea6\u548c\u5206\u7ec4\u957f\u5ea6\u5747\u4e3a12 &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/101.43.65.133:8899\/?p=657\" class=\"more-link\">Read more<span class=\"screen-reader-text\"> &#8220;\u56fd\u5bc6SM2\/3\/4 JAVA &amp; PHP\u4e92\u901a&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10],"tags":[24,76,123,122,30],"class_list":["post-657","post","type-post","status-publish","format-standard","hentry","category-it-engineer","tag-it","tag-java","tag-php","tag-122","tag-30"],"_links":{"self":[{"href":"http:\/\/101.43.65.133:8899\/index.php?rest_route=\/wp\/v2\/posts\/657","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/101.43.65.133:8899\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/101.43.65.133:8899\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/101.43.65.133:8899\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/101.43.65.133:8899\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=657"}],"version-history":[{"count":4,"href":"http:\/\/101.43.65.133:8899\/index.php?rest_route=\/wp\/v2\/posts\/657\/revisions"}],"predecessor-version":[{"id":662,"href":"http:\/\/101.43.65.133:8899\/index.php?rest_route=\/wp\/v2\/posts\/657\/revisions\/662"}],"wp:attachment":[{"href":"http:\/\/101.43.65.133:8899\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=657"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/101.43.65.133:8899\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=657"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/101.43.65.133:8899\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=657"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}