python连接pgsql库对指定字段的参数加密
Posted 神的孩子都在歌唱
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
转载说明:跟我说明,务必注明来源,附带本人博客连接。
以上是关于python连接pgsql库对指定字段的参数加密的主要内容,如果未能解决你的问题,请参考以下文章
007.PGSQL-python读取txt文件,将数据转化为dataFrame,dataFrame数据插入到pgsql; dataframe去掉索引,指定列为索引;python读取pgsql数据,读取
华为OD机试 - 敏感字段加密(Python)| 真题+思路+代码