Encryption Yii2加密生成不同的加密数据

Encryption Yii2加密生成不同的加密数据,encryption,yii2,Encryption,Yii2,我在Yi2中使用encryptByKey()对SSN和帐号进行加密。问题是,当我尝试重新生成同一帐号时,它会为同一帐号生成不同的加密数据 我无法在数据库中匹配它,如下所示: Customers::findOne(['account_number'=> Yii::$app->getSecurity()->encryptByKey($account_number, "someKeyHere")]); 是否有任何加密方法可用于在每次加密时生成相同的加密数据 谢谢,一般来说,加密就是

我在Yi2中使用encryptByKey()对SSN和帐号进行加密。问题是,当我尝试重新生成同一帐号时,它会为同一帐号生成不同的加密数据

我无法在数据库中匹配它,如下所示:

Customers::findOne(['account_number'=> Yii::$app->getSecurity()->encryptByKey($account_number, "someKeyHere")]);
是否有任何加密方法可用于在每次加密时生成相同的加密数据


谢谢,

一般来说,加密就是这样工作的。它有时被称为每次对给定明文进行加密时产生相同的密文,攻击者可以分析密文集合的模式,从而破坏安全性

在这种情况下,看起来您只存储一个加密帐号的实例;你可能会争辩说,因为“消息”从不重复,密文的不可区分性是没有意义的。这可能会导致您证明使用ECB模式(如果API提供)或HMAC(方法提供的消息身份验证代码)来计算查找密钥是合理的。如果攻击者能够访问您的数据库,则每个密钥只会有一个实例,并且不会泄露任何信息

但是,如果攻击者可以提供您的系统加密的帐号,这仍然是不安全的。例如,攻击者可以在注册期间冒充合法用户并提供SSN。如果他们选择一个重复的数字,然后在数据库中查找,他们恶意选择的加密值将与合法记录匹配。或者,如果系统拒绝他们的帐号,因为它是重复的,攻击者将知道它是合法用户正在使用的帐号。这被称为

如果使用HMAC(或ECB模式加密),则必须非常小心地设计应用程序,以防止选择明文和oracle攻击。而且,坦率地说,如果您现在是第一次遇到这些想法,那么您的知识中可能还有许多其他漏洞,这些漏洞将导致应用程序中容易被利用的漏洞