默认采用的加密算法是pbkdf2_sha512,通过哈希算法加盐迭代数次得出的结果作为密码的算法。它的基本原理是通过一个伪随机函数(例如HMAC函数),把明文和一个盐值作为输入参数,然后重复进行运算,并最终产生密钥。如果重复的次数足够大,破解的成本就会变得很高。而盐值的添加也会增加“彩虹表”攻击的难度。
我们看一个经过这种加密算法得出的密码结构:
$pbkdf2-sha512
25000
25000
25000ztkbw5jT.l8LwThHKKX03g$EFv2mH5uUh6VEZi4mmvzphsDnQdI1ufTw6JxppxXPfRIUj5JBK9N/kd.5NgiCCylwgiyUqCk0CiugHdYQQXNKA
密码通过$符号被分隔成4部分,第一个部分是计算算法名称,第二个是迭代次数,第三部分是盐值,第四部分是hash值。
激活odoo虚拟环境,在命令行运行python,通过以下语句可将明文密码’admin’进行加密,你也可以将’admin’换成你想使用的任何明文密码。
from passlib.context import CryptContext
print(CryptContext(['pbkdf2_sha512','plaintext'],deprecated=['plaintext'],).encrypt('admin'))
可得:
$pbkdf2-sha512$25000$ztkbw5jT.l8LwThHKKX03g$EFv2mH5uUh6VEZi4mmvzphsDnQdI1ufTw6JxppxXPfRIUj5JBK9N/kd.5NgiCCylwgiyUqCk0CiugHdYQQXNKA
放到odoo.conf中,
admin_passwd=$pbkdf2-sha512$25000$ztkbw5jT.l8LwThHKKX03g$EFv2mH5uUh6VEZi4mmvzphsDnQdI1ufTw6JxppxXPfRIUj5JBK9N/kd.5NgiCCylwgiyUqCk0CiugHdYQQXNKA
哪天忘记了数据库主控密码,你可以使用上述方法生成一个新的加密密码,将odoo.conf中的admin_passwd替换掉就可以了。