mysql给密码字段加密
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql给密码字段加密相关的知识,希望对你有一定的参考价值。
用update table set password=password(password);可以给password这个字段已存在的数据加密,但是当新插进数据时就不会自动加密,怎样让新插入的密码也自动加密?
你用hibernate的话,一般情况下也会用struts2的,你可以在action里写一个MD5算法,人,在调用,如/**
* @MD5加密算法
*/
public static String digestByMD5(String str) throws Exception
// 采用MD5加密算法,将任意长度字符串加密
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] bts = md.digest(str.getBytes());
// 采用Base64算法,将加密后的字节变成字符串
BASE64Encoder encoder = new BASE64Encoder();
return encoder.encode(bts);
参考技术A insert into tbname values(password('pwd'));---------新增的时候也可以用password函数转一下编码的追问
你好,我使用hibernate做的,这样恐怕不行吧
追答那这个需要在入库之前就做好加密了,后台用md5对密码做加密算了,
python连接pgsql库对指定字段的参数加密
前言
为了能及时给客户交付,2023年2月13号凌晨四点多还在给客户打升级包的打工人
问题:今天要打包升级包给客户,由于我的原因,之前的版本的发件服务器邮箱密码我没有进行加密,用户已经使用了未加密的密码,如果升级的版本打包给客户,必定会出现解密失败的报错,所以我们需要在升级包里面写一个脚本进入数据库加密邮箱密码。
解决思路:
- 通过python语言,连接数据库,查询第一条存储的邮箱数据
- 读取密码那一列,通过sm2对密码加密(这里要注意,因为我这里写的是py脚本,可是程序是java应用,所以加密的时候需要带上04,不然java那边解不出来)
- 将加密后的密码更新到表里
修改前:
修改后
代码
# !/usr/bin/python3
# -*- coding: utf-8 -*-
from gmssl import sm2
import psycopg2
# 数据库地址
host = ""
# 数据库名
database = ""
# 用户名
user = ""
# 密码
password = ""
# 数据库开放端口
port = 5432
PUBLIC_HEX_KEY = "公钥"
PRIVATE_HEX_KEY = "私钥"
class sm2Encrypt():
def __init__(self):
self.sm2_crypt = sm2.CryptSM2(public_key=PUBLIC_HEX_KEY, private_key=PRIVATE_HEX_KEY)
# 加密
def encrypt(self, info):
encode_info = self.sm2_crypt.encrypt(info.encode("utf-8"))
encode_info = bytes.hex(encode_info)
return encode_info
# 解密
def decrypt(self, info):
data = self.sm2_crypt.decrypt(bytes.fromhex(info)).decode()
return data
def sqlUpdate():
try:
conn = psycopg2.connect(
host=host,
database=database,
user=user,
password=password,
port=port
)
conn.autocommit = False
cur = conn.cursor()
# 读取第一条数据
cur.execute("select* from sys_email_smtp limit 1;")
row = cur.fetchone()
if row is not None:
# 第一列就是邮箱密码email_password
if row[7] is not None and row[7] is not '':
sm = sm2Encrypt()
try:
der = sm.decrypt(str(row[7][2:]))
print(der)
except:
# 因为是java程序,所以sm2解密需要加上04
ss = "04" + sm.encrypt(row[7])
cur.execute(
"UPDATE sys_email_smtp SET email_password = '' WHERE id = ;".format(str(ss), row[0]))
conn.commit()
print("Data updated successfully.")
else:
print("Data does not meet the condition for update.")
except Exception as e:
conn.rollback()
print("Transaction rolled back: ".format(e))
raise e
finally:
cur.close()
conn.close()
if __name__ == '__main__':
sqlUpdate()
本人csdn博客:https://blog.csdn.net/weixin_46654114
转载说明:跟我说明,务必注明来源,附带本人博客连接。
以上是关于mysql给密码字段加密的主要内容,如果未能解决你的问题,请参考以下文章