Стэнфордская библиотека Javascript Crypto. (SJCL) шифровать и дешифровать без отправки параметров

В демоверсии SJCL есть флажок "Отправить параметры и аутентифицированные данные вместе с сообщением". уменьшить сообщение до очень короткой строки.

Я не могу найти список с допустимыми параметрами для использования в функции шифрования (и дешифрования):

var encryptedMessage = sjcl.encrypt(key,message, ??? );

var decryptedMessage = sjcl.decrypt(key,encryptedMessage);

4 ответа

Если вы введете пароль, отправьте текст и нажмите "Зашифровать", результат будет в поле "Зашифрованный текст", например:
пароль: "pass", сообщение: "text", данные, прошедшие проверку: "xxx"

Результат:

{
"iv":"tjp81jkAzUpW1bI9gLDDpg==", // iv Base64 encoded
"v":1,                           // version
"iter":1000,                     // iteration count
"ks":128,                        // key size in bits
"ts":64,                         // authentication strength
"mode":"ccm",                    // mode
"adata":"xxx",                   // authenticated data
"cipher":"aes",                  // cipher
"salt":"lx06UoJDNys=",           // key derivation salt
"ct":"Gv7ptKdTtUz6AGtX"          // ciphet text
}

Пример использования с сайта:

sjcl.encrypt("password", "data") 
sjcl.decrypt("password", "encrypted-data")

Подвох в том, что несмотря на наличие заявленных режимов CCM а также OCB2 обычно не поддерживаются на разных платформах.

Спасибо за вашу помощь!!! Для минимальных накладных расходов на сообщения в моей базе данных это решение работает для меня:

  //Encrypt
  var encryptedMessage = sjcl.encrypt("myPassword","myMessage",{mode:"ccm",iter:1000,ks:128,ts:64,v:1,cipher:"aes",adata:"",salt:"myGeneratedSalt"});
  var parsedMessage = JSON.parse(encryptedMessage);
  delete parsedMessage.mode;
  delete parsedMessage.iter;
  delete parsedMessage.ks;
  delete parsedMessage.ts;
  delete parsedMessage.v;
  delete parsedMessage.cipher;
  delete parsedMessage.salt;
  delete parsedMessage.adata;
  encryptedMessageWithoutParameters = JSON.stringify(parsedMessage);

  //Decrypt
  var parsedMessage = JSON.parse(encryptedMessageWithoutParameters);
  jQuery.extend(parsedMessage,{mode:"ccm",iter:1000,ks:128,ts:64,v:1,cipher:"aes",adata:"",salt:"myGeneratedSalt"});
  messageWithParameters = JSON.stringify(parsedMessage);
  var decryptedMessage = sjcl.decrypt("myPassword",messageWithParameters);

  //Result > "myMessage"

Использовать этот:

<script type="text/javascript" src="js/sjcl.js"></script>
    <script type="text/javascript">

    var cypheredMsg = sjcl.encrypt("secret", "Hi Amresh!");
    var plainMsg = sjcl.decrypt("secret", cypheredMsg);

    console.log(cypheredMsg);
    console.log(plainMsg);

    </script>

Спасибо, Штеффен. Разделение параметров может быть немного чище, поэтому мы можем перебирать варианты для удаления. Кроме того, соль должна быть base64, которую мы можем легко сгенерировать с помощью функции JavaScript btoa().

  //Encrypt
  var salt = btoa( "myGeneratedSalt" );
  var options = {mode:"ccm",iter:1000,ks:128,ts:64,v:1,cipher:"aes",adata:"",salt:salt}
  var encryptedMessage = sjcl.encrypt("myPassword","myMessage",options);
  var parsedMessage = JSON.parse(encryptedMessage);
  var prop;
  for (prop in options) {
    delete parsedMessage[prop];
  }
  encryptedMessageWithoutParameters = JSON.stringify(parsedMessage);

  //Decrypt
  var parsedMessage = JSON.parse(encryptedMessageWithoutParameters);
  jQuery.extend(parsedMessage,options);
  messageWithParameters = JSON.stringify(parsedMessage);
  var decryptedMessage = sjcl.decrypt("myPassword",messageWithParameters);

  //Result > "myMessage"
Другие вопросы по тегам