Angular 6中是否有任何加密机制每次都会提供相同的加密输出?

问题描述 投票:0回答:1

我正在尝试用他的手机号码注册客户。我将手机号码存储为加密的手机号码,而且我还维护一个会话来存储这个加密的手机号码。一旦我退出应用程序并尝试使用相同的手机号码登录,我的会话就会消失。所以我无法从会话中获取加密的手机号码。

有没有什么办法可以创建一个加密机制,每次为同一个手机号码提供相同的加密输出?

这是我正在使用的加密机制。

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;
}
session encryption angular6 public-key-encryption
1个回答
0
投票

您正在使用随机IV的CBC模式。

mode: crypto.mode.CBC

实际上,这更好,因为它是probabilistic encryption。但是CBC模式阻止了对加密数据的比较。

您应该使用ECB操作模式来实现加密数据的相等测试而无需解密。

mode: CryptoJS.mode.ECB

ECB模式不使用/要求IV。但请记住,ECB模式会泄漏信息,请参阅维基百科的penguin

© www.soinside.com 2019 - 2024. All rights reserved.