踩完坑之后跳出来@GROUNDSPACE
MQTT hmacsha1算法
IOT访问远端服务器需要输入密码,通常会采用md5或者sha1加密算法。
参考文档中给出的是js算法实现,这里给出其java实现。
public class Utils {
public static final String bytesToHexString(byte[] bArray) {
StringBuffer sb = new StringBuffer(bArray.length);
String sTemp;
for (int i = 0; i < bArray.length; i++) {
sTemp = Integer.toHexString(0xFF & bArray[i]);
if (sTemp.length() < 2) {
sb.append(0);
}
sb.append(sTemp.toUpperCase());
}
return sb.toString();
}
public static String encryptHMAC(String signMethod, String content, String key) throws Exception {
SecretKey secretKey = new SecretKeySpec(key.getBytes("utf-8"), signMethod);
Mac mac = Mac.getInstance(secretKey.getAlgorithm());
mac.init(secretKey);
byte[] data = mac.doFinal(content.getBytes("utf-8"));
return bytesToHexString(data);
}
}
说明:
函数名:encryHAMC
参数:signMethod,content,key
其中signMethod可以选择 “hmacsha1”,或者“hmacmd5”;
content是需要加密的内容;
key是密钥。
应用示例
String mqttPassword = "";
try {
mqttPassword = encryptHMAC("hmacsha1", content, deviceSecret);
} catch (Exception e) {
throw new RuntimeException(e);
}
System.out.println("calc password : " + mqttPassword);
mqttConnectOptions.setPassword(mqttPassword.toCharArray());