Есть ли какой-нибудь механизм шифрования в Angular 6, который будет выдавать один и тот же зашифрованный вывод каждый раз? - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь зарегистрировать клиента по его номеру мобильного телефона.Я храню номер мобильного телефона как зашифрованный номер мобильного телефона, а также поддерживаю сеанс для хранения этого зашифрованного номера мобильного телефона.Когда я выхожу из приложения и пытаюсь войти в систему с тем же номером мобильного телефона, моя сессия прекращается.Поэтому я не могу получить зашифрованный номер мобильного телефона из сеанса.

Можно ли каким-либо образом создать механизм шифрования, чтобы каждый раз предоставлять один и тот же зашифрованный вывод для одного и того же номера мобильного телефона?

Это механизм шифрования, который я использую.

public encrypt_mobile(mobile): Observable<any> {
  var salt = crypto.lib.WordArray.random(128 / 8);
  var key = crypto.PBKDF2("123", salt, {
    256: 256 / 32,
    100: 100
  });
  var iv = crypto.lib.WordArray.random(128 / 8);
  var encrypted = crypto.AES.encrypt(mobile, key, {  
    // instead of message try some string or  “9876543210”
    iv: iv,
    padding: crypto.pad.Pkcs7,
    mode: crypto.mode.CBC
  });
  var encrypted_mob = salt.toString() + iv.toString() + 
    encrypted.toString();
  console.log("encrypted : ", encrypted_mob);
  return encrypted_mob;
}

1 Ответ

0 голосов
/ 19 февраля 2019

Вы используете режим CBC со случайным IV.

mode: crypto.mode.CBC

На самом деле это лучше, потому что это вероятностное шифрование .Но режим CBC предотвращает сравнение зашифрованных данных.

Вы должны использовать режим работы ECB для проверки на равенство зашифрованных данных без расшифровки.

mode: CryptoJS.mode.ECB

Режим ECB не использует / требуетIV.Однако имейте в виду, что в режиме ECB происходит утечка информации, см. пингвин из Википедии.

...