Home > Mobile >  Read a binary with javascript
Read a binary with javascript

Time:10-17

How can i read a binary like bellow ?

Binary2 {
  sub_type: 0,
  buffer: Buffer(16) [
    12,  15,  64, 88, 174,  93,
    16, 250, 162,  5, 122, 223,
    16,  98, 207, 68
  ],
  position: 16
}

I tried several things like making a parseInt:

error: NaN

or with new Uint16Array():

error:

error: TS2769 [ERROR]: No overload matches this call.
  The last overload gave the following error.
    Argument of type 'string' is not assignable to parameter of type 'ArrayBufferLike'.
    console.log('test :', new Uint16Array(contact.firstname))
TS2771 [ERROR]:     The last overload is declared here.
        new(buffer: ArrayBufferLike, byteOffset?: number, length?: number): Uint16Array;

Someone can help me to read the buffer of this binary and decrypt my aes data ?

CodePudding user response:

You not really specified the file format, for this case I created a code, you can modify if you need to for other cases (My code now just extracting the numbers from "[" to "]" with StrBetween):

 function StrBetween(str, s1, s2){    
     let pos1 = str.indexOf(s1);
     if(pos1>-1){
       pos1  = s1.length;
       return str.substr(pos1, str.indexOf(s2, pos1)-pos1);
     } else {
       return "";
     } 
    } 

  function Convert(){         
    var data = `
      Binary2 {
      sub_type: 0,
      buffer: Buffer(16) [
        12,  15,  64, 88, 174,  93,
        16, 250, 162,  5, 122, 223,
        16,  98, 207, 68
      ],
      position: 16
    }
    `;
    
    let values = StrBetween(data, "[", "]").split(",");
    var uint16 = new Uint16Array(values.length);
    
    for(let i=0; i<values.length; i  ){
     values[i] = values[i].replace('\n','').trim(); //Remove line breaks and spaces
     uint16[i] = parseInt(values[i]);
    }
    
    console.log(uint16); //Show the array               
    }

CodePudding user response:

Ok,i'm stupid. I found the solution.

1. Encrypt and set data with hex() in mongoDB like this :

let firstname = await aes.encrypt(data.fields.firstname)
data.fields.firstname = firstname.hex()

2. String format data in mongoDB :

b9314d7b7f24e79bc08518e956f9125a

3. Transform hexadecimal string to bytes array and decrypt data from mongoDB :

for (var bytes = [], c = 0; c < contact.firstname.length; c  = 2) {
      bytes.push(parseInt(contact.firstname.substr(c, 2), 16));
    }
let cipher = await aes.decrypt(new Uint8Array(bytes))
contact.firstname = cipher.toString()

thanks for your help !

  • Related