jasypt能够以很简单的方式为Java项目提供加密功能,这种简单的方式体现着它的命令行工具,与Spring,Hibernate, Springsecurity, wicket等第三方框架的集成。
本文参加jasypt官方网站:http://www.jasypt.org/ 下载jasypt包,解压缩到本地目录。
如下图:
根目录:
命令行工具目录:
说明:
在lib目录下是jasypt的核心jar和与第三方组件集成的jar.
在bin目录下是jasypt的命令行工具脚本.
在apidoc目录下自然就是帮助文档。
下面主要介绍jasypt的命令行工具(这里的操作环境是windows系统):
1.listAlgorithms.bat(listAlgorithms.sh)
DIGEST ALGORTHMS:摘要算法
PBE ALGORTHMS(PASSWORD BASE ENCRYPTION):基于口令的加密算法
2.下面介绍如何使用digest.bat, encrypt.bat, decrypt.bat
digest.bat
命令:digest.bat input=sa algorithm=SHA的意思是对输入信息:"sa" 使用SHA算法计算摘要信息,OUTPUT则是输出结果。
说明:直接输入digest.bat可以查看命令帮助信息和参数要求,这里input是必选参数,algorithm是可选参数,默认的计算摘要信息算法是MD5。
encrypt.bat和decrpt.bat
加密和解密是对应的,同样的方式,直接输入命令就可以查看帮助信息和参数要求。比如在命令窗口输入:encrypt.bat
由于encrypt.bat和decrypt.bat是对应的,因此帮助信息和参数要求是一致的,区别在于encrypt.bat的input参数值是“原信息”,decrypt.bat的input参数值是“加密信息”。
从上面的参数说明中可以看到algorithm是可选的,那是应为jasypt提供了默认的一套参数取值,而这里的加密的默认算法是:PBEWithMD5AndDES
下面通过一个例子演示一下加密和解密:
加密:
解密:
上述加密解密使用了“PBEWITHSHA1ANDRC2_40”算法,操作一切正常。
经过对PBE算法中的其它三个做了同样的测试发现使用“PBEWITHMD5ANDTRIPLEDES”算法操作失败的情况。
从上面的提示信息中很难看出问题出在什么地方,于是想到用Java程序来测试一下这个算法。结果错误提示信息如下:
org.jasypt.exceptions.EncryptionOperationNotPossibleException: Encryption raised an exception. A possible cause is you are using strong encryption algorithms and you have not installed the Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files in this Java Virtual Machine
大致的意思是没有安装JCE不受限长度策略文件,于是百度谷歌一阵再Orcale官网找到了JDK7的JCE文件。http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html
下载后解压可以放到JAVA_HOME\jdk1.7.0_45\jre\lib\security下或者JAVA_HOME\jdk1.7.0_45_jre\lib\security下,一共两个文件local_policy.jar和US_export_policy.jar.这样会覆盖度JDK默认的这两个文件。
为了一探究竟,这里个文件的内容不同之处,解压之后发现不同的地方在于local_policy.jar里的local_policy.policy内容。
JDK默认的local_policy.policy内容是:
// Some countries have import limits on crypto strength. This policy file
// is worldwide importable.
grant {
permission javax.crypto.CryptoPermission "DES", 64;
permission javax.crypto.CryptoPermission "DESede", *;
permission javax.crypto.CryptoPermission "RC2", 128,
"javax.crypto.spec.RC2ParameterSpec", 128;
permission javax.crypto.CryptoPermission "RC4", 128;
permission javax.crypto.CryptoPermission "RC5", 128,
"javax.crypto.spec.RC5ParameterSpec", *, 12, *;
permission javax.crypto.CryptoPermission "RSA", *;
permission javax.crypto.CryptoPermission *, 128;
};
JCE的local_policy.policy内容是:
// Country-specific policy file for countries with no limits on crypto strength.
grant {
// There is no restriction to any algorithms.
permission javax.crypto.CryptoAllPermission;
};
JDK默认的policy中对一些国家进口密码强度进行了限制。
关于jasypt的命令行工具使用介绍和可能产生的问题做了说明,要想了解具体的机密解密的原理可以参加《Java加密与解密的艺术》作者博客:http://snowolf.iteye.com/blog/379860 。
本文出自 “野马红尘” 博客,谢绝转载!