laravel加密手机号以后手机号如何做登录校验
着实是想不通了,所以来社区请教一下各位大佬,
laravel的加密同一串字符串会发生变化,因为向量iv是随机值
目前我这的情况是使用手机号作为账号登录,手机号又需要加密存进数据库,那我用户校验登录的时候应该怎么校验手机号呢?
如果是新加一个字段用来存手机号的哈希,那是不是也不能用laravel的hash而是要自己重新写一个。
有很多办法都可以实现,比如加个字段,加盐md5用于查找,我用的比较方便使用的一种,就是把encrypt加密函数中的随机iv改为确定值,可以根据模型id、手机号或者别的什么字符串来生成iv。
给User模型use一下我整理好的EncryptPhone就可以了 ,里面复制了encryptString方法,并把随机iv改为自定义iv
通过模型修改器访问器自动加密解密
使用phoneIs的scope来查找用户,因为去掉了iv的随机性,phone加密后的值不变,直接where即可
例如:
User::phoneIs('12345678901')->first()
。代码复制过去改改就能用:
因为是复制的Encrypter,所有参数和系统的一样,所以可以直接用decrypt解密。
效果参考: