NEWS

[gelöst]Wie kann ich mcrypt in node-red benutzen?


  • Hallo,

    weiss jemand wie ich mcrypt in node-red benutzen kann? (RIJNDAEL_128, MODE_ECB)

    … zum de- und encodieren.

    Grüße

    Thomas


  • Spaß mit Verschlüsselung. PS: geht auch bcrypt? https://github.com/wstam88/node-red-contrib-bcrypt

    7446_c2271830-d71f-425e-95c2-fc01cf695c1b.gif


  • Danke für die Info, das ist aber nicht das was ich suche 😞

    Ich erhalte verschlüsselte Daten aus einer http Abfrage - mit rijndael 128 verschlüsselt - Modus ECB.

    Die muss ich entschlüssseln - Werte verändern und wieder verschlüsselt per http versenden.

    Die brcypt node kann das nicht. Oder übersehe ich etwas?


  • Bin bei Node Red absoluter DAU. Sorry. Bcrypt ist gut für Passwörter.

    Hast Du die Daten im Filesystem oder als Stream? Filesystem: Mittels Node Red exec und dort mcrypt als Shell Kommando mit den Parametern als Payload?

    https://linuxconfig.org/how-to-easily-e … nux-system

    Oder über eine JavaScript-Function und dort dann https://github.com/tugrul/node-mcrypt?


  • Danke für den Tipp mit dem Filesystem. Habe ich probiert, aber ich bekomme die htttp-Response damit nicht entschlüsselt.

    Muss dann mal schauen, ob ich das noch hinbekomme.

    Ich versuche folgenden PHP-Befehl in node-red umzusetzen:

    $decrypt = ( mcrypt_decrypt(

    MCRYPT_RIJNDAEL_128,

    key_private,

    base64_decode( $decryptData ),

    MCRYPT_MODE_ECB,

    '' )


  • Habe mir zum Test mit

    sudo apt-get install mcrypt
    

    mcrypt auf meinem Raspberry installiert.

    'mcrypt –help' ergibt eine Befehlsübersicht. Dort habe ich dann analog Deinem Beispiel die folgende Befehlszeile erarbeitert:

    mcrypt -d <dateiname_decryptdata> -k <key_private> -m ecb -a rijndael-128</key_private></dateiname_decryptdata>
    

    Mach das mal zu Fuss mit einer Testdatei. Klappt das?

    Beispiel: testfile.nc –wird-zu--> testfile


  • Danke für Deine Hilfe. Ja so hatte ich das gemacht - bekomme aber Fehlermeldung, dass die Entschlüsselung nicht funktioniert hat.

    Ich denke, es gibt 2 mögliche Fehlerursachen:

    Der Key liegt mit als Hex vor (64 Zeichen) diesen muss ich mit hex2bin in 32 Zeichen umwandeln.

    Da es die Funktion hex2bin in JS nicht gibt, mache ich das so:

    ! var key = msg.payload;
    ! var str = '';
    ! for (var n = 0; n < key.length; n += 2) {
    ! str += String.fromCharCode(parseInt(key.substr(n, 2), 16));}
    ! msg.payload = str;
    ! return msg;

    Die http-Response liegt im base64-Format vor. Also habe ich mir die node "node-red-node-base64" installiert und mache damit die Umwandlung. (analog base64_decode in PHP).

    Beides zusammen - Key oder Daten - passt aber scheinbar nicht zusammen. Schade….


  • Hast Du das, was da rauskommt auch mal auf der Kommandozeile verwendet?


  • ja Kommandozeile habe ich versucht.

    Ich habe gerade mal mit npm install hex2bin installiert und den Keyfile in hex-Format damit konvertiert.

    Der sieht anders aus, als der selbstkonvertierte - funktioniert aber auch nicht.

    Ich vermute nun, dass ggfs. der http-Output in der http-node und in der bas64-node nicht richtig formatiert ist.

    …. für heute höre ich aber erst mal auf ..

    Ich wünsche Dir ein schönes Wochenende

    Grüße

    Thomas


  • Ich habe herausgefunden wie es geht: 😄

    Hier die Lösung, wie mcrypt (oder andere module) in node-red eingebunden werden können.Die Schritte:

    1. installieren von mcrypt:

    cd /opt/iobroker/node-modules/iobroker.node-red

    npm install mcrypt

    2. Anpassen der settings.js unter /opt/iobroker/iobroker-data/node-red

    Ganz am Ende mcrypt einfügen:

    ! functionGlobalContext: {
    ! //
    ! mcrypt:require("/opt/iobroker/node_modules/iobroker.node-red/node_modules/mcrypt")
    ! // os:require('os'),
    ! // bonescript:require('bonescript'),
    ! // arduino:require('duino')
    ! }

    3. In der Function node wo mcrypt verwendet werden soll statt "require" mcrypt mit "global.get" referenzieren:

    var mcrypt = global.get('mcrypt');

    Dann kann mcrypt ganz normal verwendet werden. z.B. zum Verschlüsseln:

    ! var mcrypt = global.get('mcrypt');
    ! var key = " …hex-wert...";
    ! var aeskey = new Buffer(key, 'hex');
    ! var MCrypt = mcrypt.MCrypt;
    ! var Ecb = new MCrypt('rijndael-128', 'ecb');
    ! Ecb.open(aeskey);
    ! var post = Ecb.encrypt(msg.payload).toString('base64');
    ! msg.payload = post;

Suggested Topics

2.0k
Online

38.4k
Users

43.8k
Topics

612.3k
Posts