<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Onenet Token Generator</title> <style> body { font-family: Arial, sans-serif; margin: 0; padding: 0; background-color: #f5f5f5; color: #333; } .container { max-width: 600px; margin: 20px auto; padding: 20px; background-color: #fff; border-radius: 5px; box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); } h1 { text-align: center; color: #007bff; } label { display: block; margin-bottom: 5px; } textarea, input[type="date"], select, button { width: 100%; padding: 8px; margin-bottom: 15px; border: 1px solid #ccc; border-radius: 3px; box-sizing: border-box; font-size: 16px; } button { background-color: #007bff; color: #fff; cursor: pointer; } button:hover { background-color: #0056b3; } textarea[readonly] { background-color: #f8f9fa; color: #555; } </style> </head> <body> <div class="container"> <h1>Onenet Token Generator</h1> <div> <label for="version">参数组版本号:</label> <textarea readonly id="version" rows="1" cols="50">2018-10-31</textarea> </div> <div> <label for="resourceName">访问资源:(产品ID 和 设备名)</label> <textarea id="resourceName" rows="2" cols="50">products/xxxxxxxxxx/devices/xxxxxxxx</textarea> </div> <div> <label for="expirationDate">访问过期时间:</label> <input type="date" id="expirationDate" value="2035-12-01"> </div> <div> <label for="signatureMethod">签名方法:</label> <select id="signatureMethod"> <option value="md5" selected>md5</option> <option value="sha1">sha1</option> <option value="sha256">sha256</option> </select> </div> <div> <label for="accessKey">设备密钥:</label> <textarea id="accessKey" rows="3" cols="50">WktRWDRxxxxxxxxocDJ5dmcwNlhoTVo5WmFwSE5PQXU=</textarea> </div> <div> <button onclick="generateToken()">Generate Token</button> </div> <div> <label for="token">Token:</label> <textarea id="token" rows="3" cols="50" readonly></textarea> </div> <div> <label for="mqttInfo">MQTT Info:</label> <textarea id="mqttInfo" rows="5" cols="50" readonly></textarea> </div> </div> <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/crypto-js.min.js"></script> <script> function generateToken() { var version = document.getElementById("version").value; var resourceName = document.getElementById("resourceName").value; var expirationDate = document.getElementById("expirationDate").value; var expirationTime = Date.parse(expirationDate) / 1000; var signatureMethod = document.getElementById("signatureMethod").value.toLowerCase(); var accessKey = document.getElementById("accessKey").value; var token = assembleToken(version, resourceName, expirationTime, signatureMethod, accessKey); document.getElementById("token").value = token; let mqttClientID = resourceName.split('/')[3]; let mqttUsername = resourceName.split('/')[1]; let mqttPassword = token; var mqttInfo = "Host: mqtts.heclouds.com\nPort: 1883\nClient ID: " + mqttClientID + "\nUsername: " + mqttUsername + "\nPassword: " + mqttPassword; document.getElementById("mqttInfo").value = mqttInfo; } function assembleToken(version, resourceName, expirationTime, signatureMethod, accessKey) { var res = encodeURIComponent(resourceName); var sig = encodeURIComponent(generatorSignature(version, resourceName, expirationTime, accessKey, signatureMethod)); var token = "version=" + version + "&res=" + res + "&et=" + expirationTime + "&method=" + signatureMethod + "&sign=" + sig; return token; } function generatorSignature(version, resourceName, expirationTime, accessKey, signatureMethod) { var encryptText = expirationTime + "\n" + signatureMethod + "\n" + resourceName + "\n" + version; var key = CryptoJS.enc.Base64.parse(accessKey); var hmac; if (signatureMethod === "sha1") { hmac = CryptoJS.HmacSHA1(encryptText, key); } else if (signatureMethod === "sha256") { hmac = CryptoJS.HmacSHA256(encryptText, key); } else if (signatureMethod === "md5") { hmac = CryptoJS.HmacMD5(encryptText, key); } else { throw new Error("Unsupported signature method"); } var signature = hmac.toString(CryptoJS.enc.Base64); return signature; } </script> </body> </html>