Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Entwicklung
    4. Hash Methode aus Java in Javascript übersetzen

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Hash Methode aus Java in Javascript übersetzen

    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      massa last edited by massa

      Hallo zusammen,

      ich arbeite gerade an einem aktualisierten myAudi Adapter. Ich stehe nun vor der Herausforderung drei Java Methode (aus der myAudi APK extrahiert) in Javascript zu übersetzen, um diese für den iobroker zu nutzen! Folgende zwei Methoden habe ich bereits gefunden:

      JAVA Original Methoden:

          static byte[] hexToBytes( String str) {
              byte[] bArr = new byte[(str.length() / 2)];
              int i = 0;
              while (i < str.length()) {
                  int i2 = i + 2;
                  bArr[i / 2] = (byte) Integer.parseInt(str.substring(i, i2), 16);
                  i = i2;
              }
              return bArr;
          }
      
         
          static String bytesToHex( byte[] bArr) {
              char[] cArr = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
              char[] cArr2 = new char[(bArr.length * 2)];
              for (int i = 0; i < bArr.length; i++) {
                  int b = bArr[i] & 255; //byte
                  int i2 = i * 2;
                  cArr2[i2] = cArr[b >>> 4];
                  cArr2[i2 + 1] = cArr[b & 15];
              }
              return new String(cArr2);
          }
      

      Javascript Übersetzung:

          function hexToBytes(hex) {
            for (var bytes = [], c = 0; c < hex.length; c += 2){
              bytes.push(parseInt(hex.substr(c, 2), 16));
            }
            adapter.log.info(bytes);
            return bytes;
          }
      
          // Convert a byte array to a hex string
          function bytesToHex(bytes) {
            for (var hex = [], i = 0; i < bytes.length; i++) {
              var current = bytes[i] < 0 ? bytes[i] + 256 : bytes[i];
              hex.push((current >>> 4).toString(16));
              hex.push((current & 0xF).toString(16));
            }
            return hex.join("");
          }
      

      Mein eigentliches Problem besteht nun darin, dass ich in der Hash Methode nie auf das richtige Ergebnis komme, da Javascript mit den Typen und Hashing anders umgeht als Java. So sieht die Hash Methode in Java aus:

      static String hashPinV2( String str, String str2) {
                try {
                  byte[] hexToBytes = hexToBytes(str);
                  byte[] hexToBytes2 = hexToBytes(str2);
                  byte[] bArr = new byte[(hexToBytes.length + hexToBytes2.length)];
                  System.arraycopy(hexToBytes, 0, bArr, 0, hexToBytes.length);
                  System.arraycopy(hexToBytes2, 0, bArr, hexToBytes.length, hexToBytes2.length);
                  return bytesToHex(MessageDigest.getInstance("SHA-512").digest(bArr));
               } 
                catch (Exception e) {
              System.err.println("ERROR");
          }
                return "1";
          }
      

      Hat jemand einen Tipp was genau ich tun muss, um das in Javascript umzusetzen? Ich habe schon eine ganze Menge ausprobiert, aber komme einfach nicht weiter... Übrigens ist es natürlich nicht wichtig genau die gleichen Methodne zu benutzen. Also wenn jemand einen anderen Weg kennt und auf das gleiche Ergebnis kommt ist das genauso gut 🙂

      Folgende Test-Werte benutze ich:

      hashPinV2(Test-Pin,Test-Challenge)

      Test-Pin: 3364
      Test-Challenge: 3680E2E102C45655318BE5660D6E43DE7D7CA8FA733BFE983FC071BE5A7B5321

      Richtiger Ziel-Hash: DE11152A24ECD60104455FA1DC6F5D7A69BB7388B562BF2B2C22C2921B5DF9944F56563C57014FDD8F86670D7499CEB2F7682892528810874CC776112585960C

      AlCalzone 1 Reply Last reply Reply Quote 0
      • AlCalzone
        AlCalzone Developer @massa last edited by AlCalzone

        @massa

        Um zwischen Hex-Strings und Byte-Arrays umzuwandeln, nutzt man in JS die Buffer-Klasse, die netterweise auch direkt von den Crypto-Methoden benötigt wird:

        const bufFromHex = Buffer.from(hexString, "hex");
        const bufToHex = bufFromHex.toString("hex");
        

        Die Node.JS-Doku sollte helfen bei der Hash-Methode https://nodejs.org/api/crypto.html#crypto_hash_digest_encoding
        Habe das mal auf der Konsole ausprobiert:

        > const crypto = require('crypto');
        undefined
        > const hash = crypto.createHash("sha512")
        undefined
        > const buf1 = Buffer.from("3364", "hex")
        undefined
        > const buf2 = Buffer.from("3680E2E102C45655318BE5660D6E43DE7D7CA8FA733BFE983FC071BE5A7B5321", "hex")
        undefined
        > const buf = Buffer.concat([buf1, buf2])
        undefined
        > hash.update(buf)
        Hash {
          _options: undefined,
          writable: true,
          readable: true,
          [Symbol(kHandle)]: {},
          [Symbol(kState)]: { [Symbol(kFinalized)]: false }
        }
        > hash.digest("hex")
        'de11152a24ecd60104455fa1dc6f5d7a69bb7388b562bf2b2c22c2921b5df9944f56563c57014fdd8f86670d7499ceb2f7682892528810874cc776112585960c'
        

        Sieht gut aus, musst nur noch den String in uppercase transformieren. 🙂

        M 1 Reply Last reply Reply Quote 0
        • M
          massa @AlCalzone last edited by

          @AlCalzone wen haben wir denn da 😉

          Vielen Dank!!
          Ich habe die letzten Tage mit diesem Rätsel verbracht und war schon echt am verzweifeln... So klappt es!
          Dann kann es ja weitergehen 🙂

          1 Reply Last reply Reply Quote 0
          • First post
            Last post

          Support us

          ioBroker
          Community Adapters
          Donate

          661
          Online

          31.8k
          Users

          80.0k
          Topics

          1.3m
          Posts

          hash java myaudi sha512
          2
          3
          370
          Loading More Posts
          • Oldest to Newest
          • Newest to Oldest
          • Most Votes
          Reply
          • Reply as topic
          Log in to reply
          Community
          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
          The ioBroker Community 2014-2023
          logo