postgresql创建加密函数

加密函数

创建原理

-- 管理员登录创建,登录命令:D:\myinstall\PostgreSQL\10\bin>psql -U postgres -d tjbzdb
create extension pgcrypto;
--encrypt 加密函数 参数1:加密数据 参数2:签名密钥 参数3:加密方式
--encode 编码函数
--加密
select encrypt('lisi', 'test1','aes')
--编码
select encode(encrypt('lisi', 'test1','aes'), 'hex')
--解码
select decode('64b02855a6a9bbcbd6f96b2d0f6be8e3','hex')

--解密
select convert_from(decrypt(decode('64b02855a6a9bbcbd6f96b2d0f6be8e3','hex'),'test1','aes'),'SQL_ASCII')
select convert_from(decrypt(encrypt('lisi', 'test1','aes'),'test1','aes'),'SQL_ASCII')

资料

函数:
解密:convert_from(decrypt(cast(字段  as bytea),cast(秘钥 as bytea),'aes'),'SQL_ASCII')
加密:encode(encrypt(cast(#{字段,jdbcType=VARCHAR} as bytea),cast('秘钥' as bytea),'aes'),'escape')

示例:
解密:convert_from(decrypt(cast( info.sell_cert_no  as bytea),cast('psbctjxykyx' as bytea),'aes'),'SQL_ASCII') as "sell_cert_no"
加密:encode(encrypt(cast(#{info.cardNum,jdbcType=VARCHAR} as bytea),cast('psbctjxykyx' as bytea),'aes'),'escape')

加密函数

create or replace function jia_mi (dataStr varchar,miYao varchar)
returns varchar as $$

	declare
	dataEncrypt varchar(255); --加密后数据
begin 	
	  select encode(encrypt(cast(dataStr as  bytea), cast(miYao as bytea),'aes'), 'hex')  into dataEncrypt;
		return dataEncrypt;
end;
$$ language plpgsql; 

解密函数

create or replace function jie_mi (dataStr varchar,miYao varchar)
returns varchar as $$

	declare
	dataDecrypt varchar(255); --加密后数据
begin 	
	 select convert_from(decrypt(cast(decode(dataStr,'hex') as bytea),cast(miYao as bytea),'aes'),'SQL_ASCII') into dataDecrypt;
		
		return dataDecrypt;
end;
$$ language plpgsql; 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
在使用 PostgreSQL 数据库时,可以使用 PostgreSQL 内置的加密函数或自定义函数来实现解密操作。以下是一种可能的解决方案: 1. 创建一个加密转换器类,实现 `javax.persistence.AttributeConverter` 接口,重写 `convertToDatabaseColumn` 和 `convertToEntityAttribute` 方法,用于加密和解密数据。例如: ```java import javax.persistence.AttributeConverter; import javax.persistence.Converter; @Converter public class EncryptionConverter implements AttributeConverter<String, String> { @Override public String convertToDatabaseColumn(String attribute) { // 实现加密逻辑 return encryptedValue; } @Override public String convertToEntityAttribute(String dbData) { // 实现解密逻辑 return decryptedValue; } } ``` 2. 在需要加密的属性上添加 `@Convert` 注解,指定使用的转换器。例如: ```java @Entity public class User { @Id private Long id; @Convert(converter = EncryptionConverter.class) private String password; // 其他属性和方法... } ``` 3. 在 SQL 查询中使用 PostgreSQL 内置的解密函数或自定义函数进行解密。以下是一个示例: ```sql SELECT id, pgp_sym_decrypt(password::bytea, 'encryptionKey') AS decrypted_password FROM user; ``` 这里使用 PostgreSQL 的 `pgp_sym_decrypt` 函数对密码进行解密,`encryptionKey` 是加密时使用的密钥。 需要注意的是,直接在 SQL 查询中解密数据可能会影响性能,并且可能会暴露加密密钥。因此,在实际应用中,建议在应用层面进行解密操作,而不是直接在 SQL 查询中解密。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

student_chenhu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值