python连接pgsql库对指定字段的参数加密

Posted 神的孩子都在歌唱

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python连接pgsql库对指定字段的参数加密相关的知识,希望对你有一定的参考价值。

前言

为了能及时给客户交付,2023年2月13号凌晨四点多还在给客户打升级包的打工人

问题:今天要打包升级包给客户,由于我的原因,之前的版本的发件服务器邮箱密码我没有进行加密,用户已经使用了未加密的密码,如果升级的版本打包给客户,必定会出现解密失败的报错,所以我们需要在升级包里面写一个脚本进入数据库加密邮箱密码。

解决思路

  1. 通过python语言,连接数据库,查询第一条存储的邮箱数据
  2. 读取密码那一列,通过sm2对密码加密(这里要注意,因为我这里写的是py脚本,可是程序是java应用,所以加密的时候需要带上04,不然java那边解不出来)
  3. 将加密后的密码更新到表里

修改前:

修改后

代码

# !/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库对指定字段的参数加密的主要内容,如果未能解决你的问题,请参考以下文章

pgsql数据库数据量怎么查

007.PGSQL-python读取txt文件,将数据转化为dataFrame,dataFrame数据插入到pgsql; dataframe去掉索引,指定列为索引;python读取pgsql数据,读取

华为OD机试 - 敏感字段加密(Python)| 真题+思路+代码

使用 codeiginter 加密库对数据进行编码并使用 js-mcrypt 进行解密

PL/pgSQL 函数中的可选参数

python 连接 oracle 统计指定表格所有字段的缺失值数