摘自:推荐10个加解密开源项目 - 知乎 (zhihu.com)
1.JavaScript加密库 Crypto-JS
CryptoJS (crypto.js) 为 JavaScript 提供了各种各样的加密算法。目前已支持的算法包括:MD5、SHA-1、SHA-256、AES、Rabbit、MARC4、HMAC、HMAC-MD5、HMAC-SHA1、HMAC-SHA256、PBKDF2
示例代码:
var digest = Crypto.MD5("Message");
var digestBytes = Crypto.MD5("Message", { asBytes: true });
var digestString = Crypto.MD5("Message", { asString: true });
项目地址:https://github.com/brix/crypto-js/releases
2.ClassFinal - Java 字节码加密工具
ClassFinal是一款Java class文件安全加密工具,支持直接加密jar包或war包,无需修改任何项目代码,兼容spring-framework,可避免源码泄漏或字节码被反编译。
项目模块说明
classfinal-core: ClassFinalde的核心模块,几乎所有加密的代码都在这里;
classfinal-fatjar: ClassFinal打包成独立运行的jar包;
classfinal-maven-plugin: ClassFinal加密的maven插件;
功能特性
无需修改原项目代码,只要把编译好的jar/war包用本工具加密即可。
运行加密项目时,无需求修改tomcat,spring等源代码。
支持普通jar包、springboot jar包以及普通java web项目编译的war包。
支持spring framework、swagger等需要在启动过程中扫描注解或生成字节码的框架。
支持maven插件,添加插件后在打包过程中自动加密。
支持加密WEB-INF/lib或BOOT-INF/lib下的依赖jar包。
环境依赖
JDK 1.8 +
本工具加密后,原始的class文件并不会完全被加密,只是方法体被清空,保留方法参数、注解等信息,这是为了兼容spring,swagger等扫描注解的框架;方法体被清空后,反编译者只能看到方法名和注解,看不到方法的具体内容;当class被classloader加载时,真正的方法体会被解密注入。
项目地址:https://gitee.com/roseboy/classfinal
3.Apache Commons Crypto
Apache Commons Crypto 是一个加密库,使用 AES-NI (Advanced Encryption Standard New Instructions) 进行优化。提供了加密级别和流级别的 API。开发者可以使用最少代码来实现高性能的 AES 加解密应用。
Maven:org.apache.commonscommons-crypto1.0.0
示例代码:
Properties properties = new Properties();
//Creates a CryptoCipher instance with the transformation and properties.
CryptoCipher cipher = Utils.getCipherInstance(CipherTransformation.AES_CTR_NOPADDING, properties);
String input = "hello world!";
int inputOffset = 0;
int inputLen = input.length();
byte[] output = new byte[1024];
int outputOffset = 0;
//Initializes the cipher with ENCRYPT_MODE, key and iv.
cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(key,"AES"), new IvParameterSpec(iv));
//Continues a multiple-part encryption/decryption operation for byte array.
cipher.update(input.getBytes("UTF-8"), inputOffset, inputLen, output, outputOffset);
//We should call do final at the end of encryption/decryption.
cipher.doFinal(inBuffer, outBuffer);
//Closes the cipher.
cipher.close();
项目地址:http://commons.apache.org/proper/commons-crypto/
4.支持国密算法和标准的OpenSSL分支 GmSSL
GmSSL (http://gmssl.org) 是支持国密算法和标准的OpenSSL分支,增加了对国密SM2/SM3/SM4算法和ECIES、CPK、ZUC算法的支持,实现了这些算法与EVP API和命令行工具的集成。GmSSL由北京大学信息安全实验室(http://infosec.pku.edu.cn)开发和维护。
GmSSL的libcrypto密码库增加的密码算法包括:
SM2是国密椭圆曲线公钥密码标准,其中包含数字签名、公钥加密和密钥交换三个具体方案,以及一个256比特素域上的推荐椭圆曲线参数。GmSSL内置了SM2的推荐曲线参数,实现了SM2的签名算法和公钥加密算法。
SM3是国密密码杂凑算法标准,输出的杂凑值长度为256比特。
SM4是国密分组密码标准,又名SMS4,其分组长度和密钥长度均为128比特。GmSSL实现了SMS4密码及SMS4的ECB、CBC、CFB、OFB等工作模式。
X9.63 KDF是密钥派生函数国际标准之一,ECIES和SM2公钥加密方案依赖该算法,GmSSL实现了X9.63 KDF,并用于支持ECIES和SM2公钥加密。
ECIES (Elliptic Curve Integrated Encryption Scheme)是椭圆曲线公钥加密的国际标准,可用于加密数据。
CPK是由南相浩和陈钟设计的基于身份的密码。GmSSL实现了CPK的系统建立和密钥生成算法,生成的密钥可以用于DSA、ECDH、ECDSA、ECIES、SM2等公钥密码算法。
ZUC(祖冲之算法)是由我国设计的序列密码,以32位字为单位输出密钥流,其密钥长度和IV长度均为128比特。GmSSL的ZUC算法处于开发中。
GmSSL提供命令行工具gmssl,可用于生成SM2签名、SM3摘要、HMAC-SM3消息认证码,支持SM4和ZUC数据加解密。
项目地址:http://gmssl.org/
5.Spring Crypto Utils
Spring Crypto Utils 旨在提供纯 Java 的加密 API,用来简化公私钥和证书存储、对称和非对称加密方法的封装,可方便的跟 Spring 框架进行集成。
项目地址:http://code.google.com/p/spring-crypto-utils/downloads/list
6.Botan - C++加密算法库
Botan 是一个 C++ 的加密算法库,支持 AES, DES, SHA-1, RSA, DSA, Diffie-Hellman 等多种算法,支持 X.509 认证以及CRLs 和 PKCS #10 。
项目地址:https://botan.randombit.net/
7.Java加密包 Jasypt
Jasypt这个Java类包为开发人员提供一种简单的方式来为项目增加加密功能,包括:密码Digest认证,文本和对象加密,集成hibernate,Spring Security(Acegi)来增强密码管理。Jasypt开发团队推出了Java加密工具Jasypt 1.4,它可与Spring Framework、Hibernate和Acegi Security集成。
与项目有关的一位开发者表示,Jasypt是一个Java库,可以使开发者不需太多操作来给Java项目添加基本加密功能,而且不需要知道加密原理。
Jasypt也即Java Simplified Encryption是http://Sourceforge.net上的一个开源项目。在当地时间11月23号的通告中,Jasypt 1.4的新特征包括:加密属性文件(encryptable properties files)、Spring Framework集成、加密Hibernate数据源配置、新的命令行工具、URL加密的Apache wicket集成以及升级文档。
根据Jasypt文档,该技术可用于加密任务与应用程序,例如加密密码、敏感信息和数据通信、创建完整检查数据的sums. 其他性能包括高安全性、基于标准的加密技术、可同时单向和双向加密的加密密码、文本、数字和二进制文件。Jasypt也可以与Acegi Security整合也即Spring Security。Jasypt亦拥有加密应用配置的集成功能,而且提供一个开放的API从而任何一个Java Cryptography Extension都可以使用Jasypt。
Jasypt还符合RSA标准的基于密码的加密,并提供了无配置加密工具以及新的、高可配置标准的加密工具。
8.轻量级密码术包 Bouncy Castle
Bouncy Castle 是一种用于Java平台的开放源码的轻量级密码术包。它支持大量的密码术算法,并提供 JCE 1.2.1 的实现。Bouncy Castle是轻量级的,从J2SE 1.4到J2ME(包括MIDP)平台,它都可以运行。它是在MIDP上运行的唯一完整的密码术包。
项目地址:http://www.bouncycastle.org/
9.多语言、跨平台加密开发库 Tink
Tink 是一个多语言、跨平台的加密开发库,提供安全,易于正确使用和难以滥用的加密 API,目前 Tink 已经被用于保护许多谷歌内部产品的数据,如 AdMob、Google Pay、Google Assistant、Firebase 与 Android Search App 等。
Tink 旨在提供安全、易于正确使用且难以滥用的加密 API,它建立在现有安全相关的库之上,如 BoringSSL 和 Java Cryptography Architecture,但谷歌专门的团队 Project Wycheproof 发现了这些库中的一些弱点,Tink 进行了跟进,使之更加安全。
使用 Tink,许多常见的加密操作,如数据加密、数字签名等只需几行代码就可以完成,以下是使用 Java 中的 AEAD 接口加密和解密的 demo:
import com.google.crypto.tink.Aead;
import com.google.crypto.tink.KeysetHandle;
import com.google.crypto.tink.aead.AeadFactory;
import com.google.crypto.tink.aead.AeadKeyTemplates;
// 1. Generate the key material.
KeysetHandle keysetHandle = KeysetHandle.generateNew(
AeadKeyTemplates.AES256_EAX);
// 2. Get the primitive.
Aead aead = AeadFactory.getPrimitive(keysetHandle);
// 3. Use the primitive.
byte[] plaintext = ...;
byte[] additionalData = ...;
byte[] ciphertext = aead.encrypt(plaintext, additionalData);
Tink 希望消除尽可能多的潜在误用。例如,如果底层加密模式需要 nonce(密码学中只被使用一次的任意或非重复的随机数),但重用 nonce 的话会产生安全问题,那么这时 Tink 将不允许用户传递 nonce。
Tink 的功能很多,大概有如下几个方面:
可以安全抵御选择密文攻击,允许安全审计员和自动化工具快速发现那些与安全要求不匹配的代码。
隔离了用于潜在危险操作的 API,例如从磁盘加载明文密钥。
为密钥管理提供支持,包括密钥轮换和逐步淘汰已弃用的密码。
可以通过设计进行扩展:可以轻松添加自定义加密方案或内部密钥管理系统,以便与 Tink 的其它部分无缝协作。Tink 的任何部分都难以更换或移除,所有组件都是可组合的,并且可以以各种组合进行选择和组合。例如,如果只需要数字签名,则可以排除对称密钥加密组件,以最大限度地减少应用程序中的代码大小。
项目地址:https://github.com/google/tink
10.跨平台的现代加密库 EverCrypt
程序员都是凡人,但数学则是不朽的。通过让编程变得更数学化,计算机科学家希望能消除向黑客敞开大门的编程错误。研究人员在 GitHub 上发布了加密工具 EverCrypt,向这个目标迈出了一大步。就像证明毕达哥拉斯定理那样,他们能证明 EverCrypt 可完全避开多种黑客攻击。
EverCrypt 没有采用常见的编程方法编写,而是利用了形式化验证。他们首先明确代码能做什么,然后证明只能这么做,排除了代码在特殊情况下偏离的可能性。
EverCrypt 始于 2016 年,是微软研究院项目 Project Everest 的一部分,当时加密库是许多软件的薄弱环节,存在大量 bug。EverCrypt 使用 F*(发音 F star)编程语言编写和验证,然后编译为 C(使用专用编译器 KreMLin 编译)和汇编语言的混合。
项目地址:https://github.com/project-ever
标签:Java,项目,Jasypt,加解密,算法,GmSSL,开源,加密,Tink From: https://www.cnblogs.com/INSTANTMOC/p/17244414.html