O dispositivo de atualização ota do thingsboard3.4 executa uma soma de verificação de cálculo total após receber o fluxo de arquivo do pacote de instalação

package com.example.demo.mqtt;


import com.alibaba.fastjson.JSONObject;
import org.apache.commons.codec.binary.Hex;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.http.util.ByteArrayBuffer;
import org.eclipse.paho.client.mqttv3.IMqttMessageListener;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;

import java.nio.ByteBuffer;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.Date;
import java.util.concurrent.atomic.AtomicInteger;


public class SubMessageListener implements IMqttMessageListener {
    
    
    private String id;
    private MqttClient mqttClient;
    private String topic;

    public SubMessageListener() {
    
    
    }

    public SubMessageListener(String id, MqttClient mqttClient, String topic) {
    
    
        this.id = id;
        this.mqttClient = mqttClient;
        this.topic = topic;
    }


    private byte[] buffer = new byte[421320];
   private  int ab=0;


    @Override
    public void messageArrived(String topic, MqttMessage mqttMessage) throws Exception {
    
    
        System.out.println("接收消息主题 : " + topic);
        if (topic.startsWith("v2/fw/response")) {
    
    

        

            for (byte aa : mqttMessage.getPayload()) {
    
    
                buffer[ab] = aa;
                ab++;
                System.out.println("ab: "+ab);
            }
            System.out.println("数量 : " + i + " ,hex=" + encodeHexString(mqttMessage.getPayload()));
            //System.arraycopy(mqttMessage.getPayload(),0,buffer,bytesize+1,mqttMessage.getPayload().length);
            sb.append(new String(mqttMessage.getPayload()));

            bytesize += mqttMessage.getPayload().length;
            System.out.println("接收消息内容size: " + mqttMessage.getPayload().length);
            if (mqttMessage.getPayload().length < 1320) {
    
    

                String hashValue = DigestUtils.sha256Hex(buffer);
                System.out.println("aa:" + hashValue);
                 hashValue = hash(buffer);
                System.out.println("aa:" + hashValue);
                System.out.println("bytesize:" + bytesize);
                if ("17ae291d08837890026d562e5b666f88d6389fe71d1183d6ed7eeee7505cc209".equals(hashValue)) {
    
    
                    System.out.println("校验和完整!!");
                } else {
    
    
                    System.out.println("校验失败!!");
                }
            }
        } else {
    
    
            System.out.println("接收消息aaa " + ": " + new String(mqttMessage.getPayload()));
        }

        System.out.println("topic : " + topic);
        System.out.println("时间 : " + new Date().getTime());



       

 



    public String hash(byte[] passBytes) {
    
    
        try {
    
    
            MessageDigest sha256 = MessageDigest.getInstance("SHA-256");


            byte[] passHash = sha256.digest(passBytes);

            StringBuilder sb = new StringBuilder();

            for (int i = 0; i < passHash.length; i++) {
    
    

                sb.append(Integer.toString((passHash[i] & 0xff) + 0x100, 16).substring(1));

            }
            String generatedPassword = sb.toString();
            return generatedPassword;

        } catch (NoSuchAlgorithmException e) {
    
    
            e.printStackTrace();
        }

        return null;

    }




}

Guess you like

Origin blog.csdn.net/qq_40351360/article/details/127678820