前言
你是否存在这样的苦恼,数据需要安全存储,但是每个系统大家自己写,很浪费时间。。
每一个子项目各自为政,加解密搞得也无法统一。也许下面这个开源项目可以帮助你。
encryption-local 一个离线版本的金融敏感信息加解密工具,用于数据库敏感信息存储。
创作目的:为金融敏感数据,提供一个简单易用的离线加解密工具。加密机服务可以在此基础上很容易的实现。
特性
- 身份证加解密
- 地址加解密
- 姓名加解密
- 邮箱加解密
- 手机号加解密
- 银行卡加解密
- 密码加解密
项目推荐
下面是一些日志、加解密、脱敏安全相关的库推荐:
项目介绍sensitive-word高性能敏感词核心库sensitive-word-admin敏感词控台,前后端分离sensitive高性能日志脱敏组件auto-log统一日志切面组件,支持全链路traceIdencryption-local离线加密机组件encryption加密机标准API+本地客户端encryption-server加密机服务拓展阅读
【老马】离线版金融敏感信息加解密组件开源项目encryption-local
【藏经阁】加密机服务完整解决方案,包含客户端+服务端
快速开始
maven 引入
- <dependency>
- <groupId>com.github.houbb</groupId>
- encryption-local-core</artifactId>
- <version>1.2.0</version>
- </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 为加密之后的密文字符串
统一出参:解密之后的明文字符串
使用
用法都是类似的,此处以手机号为例:- final String email = "18888888888";
- final String salt = "99886622";
- CommonEncryptResponse response = EncryptionLocalUtil.phoneEncrypt(email, salt);
- String cipher = response.getCipher();
- String mask = response.getMask();
- String hash = response.getHash();
- Assert.assertEquals("08276740AEC8AAC11C6D0F84184DE2B5", cipher);
- Assert.assertEquals("188****8888", mask);
- Assert.assertEquals("381FA900C0626D7D7E2DB185B3558166", hash);
- // 解密
- String plain = EncryptionLocalUtil.phoneDecrypt(cipher, salt);
- 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在指定秘钥之后,其他方法不再需要传递秘钥。
方法和工具类中一致。
例子
- EncryptionLocalBs localBs = EncryptionLocalBs.newInstance();
- // 加密
- CommonEncryptResponse encryptResponse = localBs.encrypt("123456", EncryptTypeEnum.PASSWORD.getCode());
- Assert.assertEquals("CommonEncryptResponse{cipher='8B208237BEB2E6A4390E7128E5E000D7', mask='******', hash='FEB408A10822A55A939E8E38A6612515'}", encryptResponse.toString());
- // 解密
- String plainText = localBs.decrypt(encryptResponse.getCipher(), EncryptTypeEnum.PASSWORD.getCode());
- Assert.assertEquals("123456", plainText);
复制代码 小结
离线版本的加解密好处是非常的方便。
不过缺点也比较明显,那就是在真正追求安全的公司,研发是不能够拥有直接加解密的能力的。
所以最好是有一个单独的加密机服务,对公司内部提供统一的加解密能力。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |