是否有来自Postgres的pgcrypto的pgp_sym_encrypt的MariaDB等价物?

qvtsj1bj  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(122)

我的任务是将Postgres 13数据库迁移到MariaDB。现有的Postgres数据库在插入时使用pgp_sym_encrypt来加密某些数据值:

insert into a_table (
  normal_value,
  secret_value
) values (
  'normal',
  pgp_sym_encrypt(0.123::text, 'secret_key')
)

字符串
然后用以下方法解密:

select
  normal_value,
  cast(pgp_sym_decrypt(secret_value, 'secret_key') as double precision)
from a_table


MariaDB有这样的东西吗?迁移现有数据时有哪些选项?

hwazgwia

hwazgwia1#

选项1:迁移到AES加密/解密

使用postgres将列中的值更改为支持AES_ENCRYPT/DECRYPT的值,并迁移以下内容:

alter table a_table add secret_sym bytea;
update a_table set secret_sym = encrypt(cast(pgp_sym_decrypt(secret_value, 'secret_key') as bytea), 'secret_key'::bytea, 'aes-ecb/pad:pkcs'::text);
select cast(convert_from(decrypt(secret_sym, 'secret_key'::bytea, 'aes-ecb/pad:pkcs'::text), 'utf-8') as double precision) as decrypted_value from a_table

字符串
参考:postgres fiddle
使用MariaDB函数AES_DECRYPT/ENCRYPT,现在可以解密secret_sym。

select normal_value, aes_decrypt(secret_value, 'secret_key') from a_table


参考:mariadb fiddle
参考:希望很快注意到基于AES functions的非ecb

选项二:创建PGP自定义项

服务器中似乎没有现有的PGP函数,并且UDF functions的集合似乎不包括它。
但是,使用Rust UDF crate创建自己的UDF函数非常容易。
pgp crate似乎支持像PostgreSQL一样的对称PGP
Rust UDF的贡献请求是一个很好的地方,可以让您的工作可用。如果它超出了你的能力/时间可用性,你可以只要求它,并提供支付其实施。

相关问题