找回密码
 立即注册
首页 业界区 安全 【老马】离线版金融敏感信息加解密组件开源项目 encrypt ...

【老马】离线版金融敏感信息加解密组件开源项目 encryption-local

寥唏 2025-5-31 23:16:12
前言

你是否存在这样的苦恼,数据需要安全存储,但是每个系统大家自己写,很浪费时间。。
每一个子项目各自为政,加解密搞得也无法统一。也许下面这个开源项目可以帮助你。
encryption-local 一个离线版本的金融敏感信息加解密工具,用于数据库敏感信息存储。
创作目的:为金融敏感数据,提供一个简单易用的离线加解密工具。加密机服务可以在此基础上很容易的实现。
特性


  • 身份证加解密
  • 地址加解密
  • 姓名加解密
  • 邮箱加解密
  • 手机号加解密
  • 银行卡加解密
  • 密码加解密
项目推荐

下面是一些日志、加解密、脱敏安全相关的库推荐:
项目介绍sensitive-word高性能敏感词核心库sensitive-word-admin敏感词控台,前后端分离sensitive高性能日志脱敏组件auto-log统一日志切面组件,支持全链路traceIdencryption-local离线加密机组件encryption加密机标准API+本地客户端encryption-server加密机服务拓展阅读

【老马】离线版金融敏感信息加解密组件开源项目encryption-local
【藏经阁】加密机服务完整解决方案,包含客户端+服务端
快速开始

maven 引入
  1. <dependency>
  2.     <groupId>com.github.houbb</groupId>
  3.     encryption-local-core</artifactId>
  4.     <version>1.2.0</version>
  5. </dependency>
复制代码
方法概览

常见方法都在 EncryptionLocalUtil#xxx 工具类中可见。
加密

方法说明addressEncrypt地址加密nameEncrypt姓名加密emailEncrypt邮箱加密phoneEncrypt手机号加密idCardEncrypt身份证加密bankCardNoEncrypt银行卡加密passwordEncrypt密码加密统一入参:(text, salt) text 为待加密的内容, salt 为秘钥。v1.1.0 支持不带 salt 的方法。
统一出参:CommonEncryptResponse 对象,有 3 个属性:
属性说明cipher密文mask掩码hash摘要解密

方法说明addressDecrypt地址解密nameDecrypt姓名解密emailDecrypt邮箱解密phoneDecrypt手机号解密idCardDecrypt身份证解密bankCardNumDecrypt银行卡解密passwordDecrypt密码解密统一入参:cipher 为加密之后的密文字符串
统一出参:解密之后的明文字符串
使用

用法都是类似的,此处以手机号为例:
  1. final String email = "18888888888";
  2. final String salt = "99886622";
  3. CommonEncryptResponse response = EncryptionLocalUtil.phoneEncrypt(email, salt);
  4. String cipher = response.getCipher();
  5. String mask = response.getMask();
  6. String hash = response.getHash();
  7. Assert.assertEquals("08276740AEC8AAC11C6D0F84184DE2B5", cipher);
  8. Assert.assertEquals("188****8888", mask);
  9. Assert.assertEquals("381FA900C0626D7D7E2DB185B3558166", hash);
  10. // 解密
  11. String plain = EncryptionLocalUtil.phoneDecrypt(cipher, salt);
  12. Assert.assertEquals(email, plain);
复制代码
其他的各种数据效果示例整理如下,秘钥统一使用 99886622。
注意:生产环境使用,必须保证秘钥的复杂性(建议不低于 10 位)
类别明文秘文掩码摘要地址太平洋比基尼海滩比奇堡镇贝壳街124号的波萝屋D8D9E99FB8286107C2F75325C0B9046CF335EE4AC4FCD3F27E0D6BFD8B3DBF39440A3D69422A3AF933576798CF3860F330F288E196CEACB22CCCDA0623B94355太平洋比基尼*************的波萝屋31912515337902B8A3CC1CBDB5772358姓名海绵宝宝91AF56071FA8830391144DBEAE3967DA海**宝94B221D98E0EF588B5304A88752DC6C7邮箱haimian@baobao.com15768CD9C0E70E2C798451E7982C8877DF991568ECD7BC3E1A9E9AD72455B085hai****@baobao.com4C651B4CDACA3CFA4876277B678282A9手机1888888888808276740AEC8AAC11C6D0F84184DE2B5188****8888381FA900C0626D7D7E2DB185B3558166身份证33078119850907947974101E0AAF25796680E40F3198D1AEFBC00E25FD8316F40CE90B425338894A42330781*********4792C7E7A814C36DE11EF01F39C35CECF12银行卡4427290920309717288D5EC5432203677D3714E9A270F9998AC04BF65E5A36C6773187A4239D05EE442729******9717DE550BAF362B3EF640FF5AEC7D6E2F38密码1234568B208237BEB2E6A4390E7128E5E000D7******FEB408A10822A55A939E8E38A6612515
完整例子参考 EncryptionLocalUtilTest.java
引导类

为了便于用于拓展,加密支持通过引导类 EncryptionLocalBs 灵活指定配置。
配置

EncryptionLocalBs 中支持用户自定义下列配置。
属性说明默认值salt秘钥nullhash哈希策略md5secret加密策略aes在指定秘钥之后,其他方法不再需要传递秘钥。
方法和工具类中一致。
例子
  1. EncryptionLocalBs localBs = EncryptionLocalBs.newInstance();
  2. // 加密
  3. CommonEncryptResponse encryptResponse = localBs.encrypt("123456", EncryptTypeEnum.PASSWORD.getCode());
  4. Assert.assertEquals("CommonEncryptResponse{cipher='8B208237BEB2E6A4390E7128E5E000D7', mask='******', hash='FEB408A10822A55A939E8E38A6612515'}", encryptResponse.toString());
  5. // 解密
  6. String plainText = localBs.decrypt(encryptResponse.getCipher(), EncryptTypeEnum.PASSWORD.getCode());
  7. Assert.assertEquals("123456", plainText);
复制代码
小结

离线版本的加解密好处是非常的方便。
不过缺点也比较明显,那就是在真正追求安全的公司,研发是不能够拥有直接加解密的能力的。
所以最好是有一个单独的加密机服务,对公司内部提供统一的加解密能力。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册