it-swarm.com.de

Ver- und Entschlüsselung von JavaScript-Strings?

Ich bin daran interessiert, eine kleine App für den persönlichen Gebrauch zu entwickeln, mit der Informationen auf der Clientseite mit JavaScript verschlüsselt und entschlüsselt werden können. Die verschlüsselten Informationen werden in einer Datenbank auf einem Server gespeichert, niemals jedoch die entschlüsselte Version.

Es muss nicht unbedingt supersicher sein, aber ich würde gerne einen derzeit ungebrochenen Algorithmus verwenden.

Im Idealfall könnte ich so etwas tun

var gibberish = encrypt(string, salt, key);

die codierte Zeichenfolge zu generieren, und so etwas wie

var sensical = decrypt(gibberish, key);

um es später zu entschlüsseln.

Bisher habe ich folgendes gesehen: http://bitwiseshiftleft.github.io/sjcl/

Welche anderen Bibliotheken sollte ich mir ansehen?

115
jeremiahs
 var encrypted = CryptoJS.AES.encrypt("Message", "Secret Passphrase");
//U2FsdGVkX18ZUVvShFSES21qHsQEqZXMxQ9zgHy+bu0=

var decrypted = CryptoJS.AES.decrypt(encrypted, "Secret Passphrase");
//4d657373616765


document.getElementById("demo1").innerHTML = encrypted;
document.getElementById("demo2").innerHTML = decrypted;
document.getElementById("demo3").innerHTML = decrypted.toString(CryptoJS.enc.Utf8);
Full working sample actually is:

    <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/aes.js"></script>

<br><br>
<label>encrypted</label>
<div id="demo1"></div>
<br>

<label>decrypted</label>
<div id="demo2"></div>

<br>
<label>Actual Message</label>
<div id="demo3"></div>
137
Tomas Kirda

Wie wäre es mit CryptoJS ?

Es ist eine solide Kryptobibliothek mit vielen Funktionen. Es implementiert Hashes, HMAC, PBKDF2 und Chiffren. In diesem Fall brauchen Sie Chiffren. Schauen Sie sich die Schnellstartanleitung auf der Homepage des Projekts an.

Sie könnten etwas mit der AES tun:

<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/aes.js"></script>

<script>
    var encryptedAES = CryptoJS.AES.encrypt("Message", "My Secret Passphrase");
    var decryptedBytes = CryptoJS.AES.decrypt(encryptedAES, "My Secret Passphrase");
    var plaintext = decryptedBytes.toString(CryptoJS.enc.Utf8);
</script>

Was die Sicherheit anbelangt, wird der AES-Algorithmus zum Zeitpunkt meines Schreibens als ungebrochen angesehen

Bearbeiten:

Scheint, dass die Online-URL nicht verfügbar ist. Sie können die heruntergeladenen Dateien für die Verschlüsselung unter dem angegebenen Link verwenden und die entsprechenden Dateien in Ihrem Stammordner der Anwendung ablegen.

https://code.google.com/archive/p/crypto-js/downloads

oder verwendet andere CDN wie https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/components/aes-min.js

53
ovidb

Ich habe eine einfache Textverschlüsselung/-entschlüsselung erstellt. Keine Abhängigkeiten mit einer externen Bibliothek.

Das sind die Funktionen

let cipher = salt => {
    let textToChars = text => text.split('').map(c => c.charCodeAt(0))
    let byteHex = n => ("0" + Number(n).toString(16)).substr(-2)
    let applySaltToChar = code => textToChars(salt).reduce((a,b) => a ^ b, code)    

    return text => text.split('')
        .map(textToChars)
        .map(applySaltToChar)
        .map(byteHex)
        .join('')
}

let decipher = salt => {
    let textToChars = text => text.split('').map(c => c.charCodeAt(0))
    let saltChars = textToChars(salt)
    let applySaltToChar = code => textToChars(salt).reduce((a,b) => a ^ b, code)
    return encoded => encoded.match(/.{1,2}/g)
        .map(hex => parseInt(hex, 16))
        .map(applySaltToChar)
        .map(charCode => String.fromCharCode(charCode))
        .join('')
}

Und Sie können sie wie folgt verwenden:

// To create a cipher
let myCipher = cipher('mySecretSalt')

//Then cipher any text:
myCipher('the secret string')   // --> "7c606d287b6d6b7a6d7c287b7c7a61666f"

//To decipher, you need to create a decipher and use it:
let myDecipher = decipher('mySecretSalt')
myDecipher("7c606d287b6d6b7a6d7c287b7c7a61666f")    // --> 'the secret string'
16
Jorgeblom

Moderne Browser unterstützen jetzt die crypto.subtle API, die native Verschlüsselungs- und Entschlüsselungsfunktionen (nicht weniger asynchron!) Mit einer der folgenden Methoden bereitstellt: AES-CBC, AES-CTR, AES-GCM oder RSA-OAEP.

https://www.w3.org/TR/WebCryptoAPI/#dfn-Crypto

12
richardtallent

CryptoJS wird nicht mehr unterstützt. Wenn Sie es weiterhin verwenden möchten, können Sie zu dieser URL wechseln:

<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/aes.js"></script>

3

Einfache Funktionen,


function Encrypt(value) 
{
  var result="";
  for(i=0;i<value.length;i++)
  {
    if(i<value.length-1)
    {
        result+=value.charCodeAt(i)+10;
        result+="-";
    }
    else
    {
        result+=value.charCodeAt(i)+10;
    }
  }
  return result;
}
function Decrypt(value)
{
  var result="";
  var array = value.split("-");

  for(i=0;i<array.length;i++)
  {
    result+=String.fromCharCode(array[i]-10);
  }
  return result;
} 
1
Omi

Verwenden Sie SimpleCrypto

Verwenden von encrypt () und decrypt ()

Um SimpleCrypto zu verwenden, erstellen Sie zunächst eine SimpleCrypto-Instanz mit einem geheimen Schlüssel (Kennwort). Der geheime Schlüsselparameter MUSS beim Erstellen einer SimpleCrypto-Instanz definiert werden.

Verwenden Sie zum Ver- und Entschlüsseln von Daten einfach die Funktionen encrypt () und decrypt () einer Instanz. Hierbei wird der AES-CBC-Verschlüsselungsalgorithmus verwendet.

var _secretKey = "some-unique-key";

var simpleCrypto = new SimpleCrypto(_secretKey);

var plainText = "Hello World!";
var chiperText = simpleCrypto.encrypt(plainText);
console.log("Encryption process...");
console.log("Plain Text    : " + plainText);
console.log("Cipher Text   : " + cipherText);
var decipherText = simpleCrypto.decrypt(cipherText);
console.log("... and then decryption...");
console.log("Decipher Text : " + decipherText);
console.log("... done.");
0
Murtaza Hussain