ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

pgrust 加密与哈希:pgcrypto 与 SHA-2 实现的安全指南

pgrust 加密与哈希:pgcrypto 与 SHA-2 实现的安全指南 pgrust 加密与哈希pgcrypto 与 SHA-2 实现的安全指南【免费下载链接】pgrustPostgres rewritten in Rust, now faster than Postgres and Clickhouse项目地址: https://gitcode.com/GitHub_Trending/pg/pgrustpgrust 是一个用 Rust 重写 PostgreSQL 的开源项目官方描述直言其性能比 PostgreSQL 和 ClickHouse 更快。对数据库而言速度固然重要但数据加密与哈希安全同样决定成败。本指南将带你全面了解 pgrust 中的 pgcrypto 加密扩展以及 SHA-2 哈希家族在 Rust 后端中的实现细节帮助你用更安全的方式保护敏感数据。pgrust 是什么为什么值得关注它的加密能力pgrust 不是简单的翻译版 PostgreSQL而是把整个数据库后端用 Rust 重写同时保持 SQL 语法和生态兼容。这意味着你熟悉的pgcrypto扩展、pg_digest函数、encrypt/decrypt加密函数在 pgrust 中都以纯 Rust 代码的形式重新实现不再依赖 C 语言的动态库加载.so而是作为内建模块直接注册进数据库引擎。这种架构带来的直接好处是加密代码路径更安全、更可控——Rust 的内存安全特性让缓冲区溢出、悬垂指针等 C 语言常见漏洞在源头被消除而这恰恰是加密实现最容易出问题的领域。pgcrypto 扩展的核心能力一览pgcrypto 是 PostgreSQL 生态中最常用的加密扩展pgrust 完整移植了它的全部能力。以下是它在 pgrust 中的功能全景功能分类提供的函数典型用途哈希摘要pg_digest计算 MD5、SHA-1、SHA-2 系列摘要值消息认证pg_hmac带密钥的哈希校验防止数据被篡改对称加密encrypt/decryptAES、Blowfish、DES、CAST5 加解密带 IV 加密encrypt_iv/decrypt_iv更安全的 CBC 模式加解密密码哈希crypt/gen_saltbcrypt、md5-crypt、des-crypt 密码存储随机数gen_random_bytes/gen_random_uuid安全随机字节与 UUID v4PGP 套件pgp_sym_encrypt/pgp_sym_decryptOpenPGP 格式的对称加密编码转换pg_armor/pg_dearmorPGP ASCII armor 编码这些函数的实现分散在 crates/contrib/pgcrypto/src/ 目录下入口文件 lib.rs 中清晰标注了每种能力的实现策略。哈希与摘要SHA-2 家族在 pgrust 中的实现SHA-2 是当前最主流的加密哈希标准包含 SHA-224、SHA-256、SHA-384 和 SHA-512 四个变体。在 pgrust 中SHA-2 家族并不是调用外部 OpenSSL 库而是逐字节移植了 PostgreSQL 原生的 C 参考实现移植代码位于 crates/common/cryptohash/src/lib.rs与 SHA-1 的 Rust 移植版 sha1.rs 一起组成了完整的哈希调度层。这意味着 pgrust 生成的摘要与标准 PostgreSQL非 OpenSSL 构建字节级一致不会出现迁移数据库后哈希值对不上的问题。最常用的哈希查询pg_digest 使用示例-- 计算字符串的 SHA-256 摘要 SELECT pg_digest(hello pgrust, sha256); -- 支持 md5、sha1、sha224、sha256、sha384、sha512 SELECT pg_digest(hello, sha512);算法名称不区分大小写内部会自动归一化处理。如果你传入了不支持的算法名会得到与 C 版本完全一致的报错信息Cannot use xxx: No such hash algorithm。HMAC 消息认证防止数据被篡改与普通哈希不同HMAC 需要一把密钥参与计算只有同时掌握数据和密钥的人才能验证消息完整性。pgrust 按照 RFC 2104 标准实现了 HMAC核心逻辑位于 hashing.rs-- 用密钥 key 对数据计算 HMAC-SHA256 SELECT pg_hmac(transaction data, secret-key, sha256);在支付回调验证、API 签名校验等场景中HMAC 是比普通哈希更安全的选择。对称加密encrypt/decrypt 与 AES 算法详解pgrust 的对称加密使用 RustCrypto 生态的纯 Rust 算法库支持 AES-128/192/256、Blowfish、DES、3DES 和 CAST5加密模式支持 ECB 与 CBC填充方式支持 PKCS#7 或无填充与 OpenSSL 的输出逐字节一致。实现见 cipher.rs。基础加密与解密示例-- 使用 AES-256-CBC 加密 SELECT encrypt(敏感数据, 0123456789abcdef0123456789abcdef, aes-cbc); -- 解密还原 SELECT decrypt(encrypt(敏感数据, key1234567890abcdef1234567890abcdef, aes-cbc), key1234567890abcdef1234567890abcdef, aes-cbc);带 IV 的加密为什么更安全在 CBC 模式下每条消息应使用不同的初始化向量IV避免相同的明文产生相同的密文。pgrust 提供了encrypt_iv/decrypt_iv变体SELECT encrypt_iv(data, 0123456789abcdef0123456789abcdef, iv1234567890abcd, aes-cbc);安全提醒encrypt不带 IV 时会使用全零 IV仅适合测试场景。生产环境请务必使用encrypt_iv并随机生成 IV。密码哈希bcrypt 与安全存储用户密码存储用户密码绝不能使用明文或简单 MD5——正确做法是使用加盐慢哈希。pgrust 完整支持 pgcrypto 的密码哈希体系实现见 crypt.rs-- 生成 bcrypt 盐默认 6 轮可指定轮数 SELECT gen_salt(bf); -- 计算密码哈希 SELECT crypt(user-password, gen_salt(bf, 10)); -- 验证密码把存储的哈希值作为盐传入 SELECT crypt(user-password, $2a$10$存储的哈希值) $2a$10$存储的哈希值;支持的类型包括bfbcrypt、md5、des、xdes。bcrypt 通过可配置的轮数cost factor显著提高暴力破解成本是当前推荐的选择。随机数与 UUIDgen_random_bytes 的安全来源安全随机数是一切加密操作的地基。pgrust 的gen_random_bytes使用移植自 PostgreSQL 的pg_strong_random实现直接读取操作系统安全随机源如 Linux 的/dev/urandom而非可预测的伪随机数生成器-- 生成 16 字节安全随机数 SELECT gen_random_bytes(16); -- 生成 UUID v4 SELECT gen_random_uuid();对应的实现位于 lib.rs 的fc_pg_random_bytes与fc_pg_random_uuid函数UUID 严格遵循 RFC 4122 的 version 4 格式随机版本。PGP 加密套件与 armor 编码PGPOpenPGP套件是 pgcrypto 中最强大的功能之一pgrust 也完成了移植代码位于 crates/contrib/pgcrypto/src/pgp/。它支持对称密钥加密、公钥加密RSA/ElGamal、数据压缩、S2K 密钥派生、CFB 加密模式与 MDC 完整性检测。-- 对称加密口令保护数据 SELECT pgp_sym_encrypt(机密内容, 口令); -- 解密 SELECT pgp_sym_decrypt(pgp_sym_encrypt(机密内容, 口令), 口令); -- 输出为 ASCII armor 格式便于在文本协议中传输 SELECT pg_armor(pgp_sym_encrypt(机密内容, 口令));pg_armor/pg_dearmor把二进制密文转换为可打印的 ASCII 格式非常适合存储在文本字段或通过邮件传输。如何在 pgrust 中启用与使用这些安全函数pgcrypto 在 pgrust 中作为内建库注册无需编译.so文件。获取源码后即可体验git clone https://gitcode.com/GitHub_Trending/pg/pgrustpgrust 还支持通过pgcrypto.builtin_crypto_enabled这个自定义 GUC 参数控制内建加密模式注册逻辑见 gucs.rs。同时pg_check_fipsmode()函数可以探测当前是否处于 FIPS 模式方便满足合规要求。安全实践清单使用 pgcrypto 的注意事项场景推荐做法避免做法密码存储crypt() bcrypt轮数 ≥ 10明文存储或简单 MD5数据完整性pg_hmac带密钥校验只算摘要不校验字段加密encrypt_iv 随机 IVencrypt全零 IV哈希算法优先 SHA-256/SHA-512新项目避免 MD5/SHA-1随机数gen_random_bytes/gen_random_uuid自实现随机算法密钥管理密钥与应用分离、定期轮换硬编码在 SQL 中总结pgrust 用 Rust 重写 PostgreSQL 时将 pgcrypto 加密扩展和 SHA-2 哈希体系完整、忠实地移植了过来哈希输出与 C 版本字节级一致加密算法逐字节对齐 OpenSSL 行为而底层换成了内存安全的 Rust 实现。无论你是迁移现有数据库还是在新项目中构建安全的用户认证、数据加密体系pgrust 的加密与哈希能力都能提供又快又安全的保障。结合本文的实践清单现在就开始为你的数据加上一把可靠的锁吧。【免费下载链接】pgrustPostgres rewritten in Rust, now faster than Postgres and Clickhouse项目地址: https://gitcode.com/GitHub_Trending/pg/pgrust创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表