我正在尝试用他的手机号码注册客户。我将手机号码存储为加密的手机号码,而且我还维护一个会话来存储这个加密的手机号码。一旦我退出应用程序并尝试使用相同的手机号码登录,我的会话就会消失。所以我无法从会话中获取加密的手机号码。
有没有什么办法可以创建一个加密机制,每次为同一个手机号码提供相同的加密输出?
这是我正在使用的加密机制。
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;
}
您正在使用随机IV的CBC模式。
mode: crypto.mode.CBC
实际上,这更好,因为它是probabilistic encryption。但是CBC模式阻止了对加密数据的比较。
您应该使用ECB操作模式来实现加密数据的相等测试而无需解密。
mode: CryptoJS.mode.ECB
ECB模式不使用/要求IV。但请记住,ECB模式会泄漏信息,请参阅维基百科的penguin。