提交 6dcf1796 authored 作者: linzhenjie's avatar linzhenjie

加mqtt验证接口

上级 7086507c
package tech.glinfo.enbao.common.utils;
import java.util.Arrays;
import java.util.Collections;
public class EncryptUtil {
/**
* 根据设备编号计算mqtt登录密码
* @param sn 设备编号,14位 如002EB212230201
* @return
*/
public static String encrypt(String sn) {
if(sn == null || sn.length() != 14) {
return null;
}
String[] ns = sn.substring(5).split("");
int len = ns.length;
String[] ons = new String[len];
System.arraycopy(ns, 0, ons, 0, ns.length);
// 第一步把SN 码后 9位从大到小排序
Arrays.sort(ns, Collections.reverseOrder());
// System.out.println(Arrays.toString(ons));
// System.out.println(Arrays.toString(ns));
int sum = 0;
int[] is = new int[len];
// 第二步 排序后的与未排序的进行异或运算 并计算一个累加和
for(int i=0; i < len; i++) {
int a = Integer.valueOf(ns[i]);
int b = Integer.valueOf(ons[i]);
is[i] = a ^ b;
sum += is[i];
}
// System.out.println(sum);
char[] pwd = new char[len];
// 第三步 异或后的再进行遍历一遍 并且加上该键值再加上累加和 再对26求余 再加上 97
for(int i=0; i<len; i++) {
pwd[i] = (char) ((i + sum + is[i]) % 26 + 97);
}
// System.out.println(String.valueOf(pwd));
return String.valueOf(pwd);
}
}
package tech.glinfo.enbao.modules.mqtt.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import tech.glinfo.enbao.common.utils.EncryptUtil;
import tech.glinfo.enbao.modules.mqtt.entity.AuthEntity;
@Slf4j
@RestController
@RequestMapping("mqtt")
public class MqttController {
@PostMapping("auth")
public ResponseEntity<Object> auth(AuthEntity auth){
log.info("请求参数:{}", auth);
String pwd = EncryptUtil.encrypt(auth.getUsername());
if(auth.getPassword() != null && auth.getPassword().equals(pwd)) {
return new ResponseEntity<Object>(HttpStatus.OK);
} else {
return new ResponseEntity<Object>("auth deny!", HttpStatus.UNAUTHORIZED);
}
}
}
package tech.glinfo.enbao.modules.mqtt.entity;
import lombok.Data;
@Data
public class AuthEntity {
private String clientid;//客户端ID
private String username;//用户名
private String password;//密码
private String ip;//ip地址
}
import io.swagger.models.auth.In;
import java.util.Arrays;
import java.util.Collections;
public class MqttTest {
public static void main(String[] args) {
for(int i=4; i<10; i++) {
String sn = "002EB21223020"+i;
String n = sn.substring(5);
// String[] ns = n.split("");
// String[] ons = new String[9];
// System.arraycopy(ns, 0, ons, 0, ns.length);
// Arrays.sort(ns, Collections.reverseOrder());
// System.out.println(Arrays.toString(ons));
// System.out.println(Arrays.toString(ns));
encrypt(n);
}
}
public static String encrypt(String sn) {
String[] ns = sn.split("");
int len = ns.length;
String[] ons = new String[len];
System.arraycopy(ns, 0, ons, 0, ns.length);
Arrays.sort(ns, Collections.reverseOrder());
System.out.println(Arrays.toString(ons));
// System.out.println(Arrays.toString(ns));
int sum = 0;
int[] is = new int[len];
for(int i=0; i < len; i++) {
int a = Integer.valueOf(ns[i]);
int b = Integer.valueOf(ons[i]);
is[i] = a ^ b;
sum += is[i];
}
// System.out.println(sum);
char[] pwd = new char[len];
for(int i=0; i<len; i++) {
int temp = (i + sum + is[i]) % 26 + 97;
// System.out.println(temp);
pwd[i] = (char) temp;
// System.out.println(pwd[i]);
// System.out.print(new Character(pwd[i]).toString());
}
System.out.println(String.valueOf(pwd));
return null;
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论