Java加密与解密的艺术-读书笔记3-4章,加密与解密3-4
分享于 点击 22296 次 点评:21
Java加密与解密的艺术-读书笔记3-4章,加密与解密3-4
第3章-Java加密利器 Java安全领域组成部分:Java安全领域总共分为4个部分:JCA(Java Cryptography Architecture,Java加密体系结构)、JCE(Java Cryptography Extension Java加密扩展包)、JSSE(Java Secure Sockets Extensions Java安全套接字扩展包)、JAAS(Java Authentication and Authentication Service Java鉴别与安全服务) JCA和JCE并不执行任何算法,他们只是连接应用和实际算法实现的一组接口。 根据美国出口限制规定,JCA可出口,但JCE对部分国家是限制出口的。第三方的Bouncy Castle JCE就是其中的一个安全提供者。 Bouncy Castle的API是免费的。 JDK1.4版本及其后续版本中包含了上述扩展包,无须进行配置。 sun.security.rsa.SunRsaSign是实现RSA算法的提供者 安全提供者实现了两个抽象的概念:引擎和算法。引擎可以理解为操作,如加密、解密等。算法则实现了操作如何执行,如一个算法可以理解为一个引擎的具体实现。 关于出口的限制-这种出口与进口的限制主要体现在JCE和JSSE的加密算法中。DES因受到军事出口限制,目前仅提供56位的密钥长度,而实际上,安全要求则至少128位。非军事加密算法强度远不如军事加密算法强度高。 本书主要集中在java.security和javax.crypto包。第4章-他山之石可以攻玉 受出口限制,密钥长度上不恩能够满足要求,部分算法未能支持,如MD4、SHA-224等算法; 对于出口限制,SUN通过权限文件(local_policy.jar、US_export_policy.jar)做了相应限制。但幸运的是,SUN在官方主页上提供了替换文件,可以减少相关的限制。搜索Java Cryptography Extension(JCE) Unlimited Strength Jurisdiction Policy File。 Bouncy Castle提供了一系列算法支持实现;Commons Codec并未对Java7提供扩展加密算法。仅仅是对Java7提供的API做了扩展。 配置权限文件-切换到%JDK_Home%jre\lib\security目录下,对应覆盖local_policy.jar和US_export_policy.jar两个文件。同时,你可能有必要在%JRE_HOME%lib\security目录下,也对应覆盖这两个文件。 我们在应用服务器上安装的是JRE,而不是JDK。因此有必要在应用服务器的%JRE_HOME%\lib\security目录下,对应覆盖这两个权限文件。 如果不加权限配置直接使用256位长度的密钥,就会得到名为“java.security.InvalidKeyException”的异常。 获得加密组件-我们可以下载Bouncy Castle最新的加密组件包,主要是bcprov-jdk16-149.jar和bcprov-ext-jdk16-149.jar两个文件。 扩充算法支持: 配置%JDK_HOME%\jre\lib\security\java.security文件 为了加入Bouncy Castle加密组件需要这样做: #增加BouncyCastleProvider security.provider.11=org.bouncycastle.jce.provider.BouncyCastleProvider 将bcprov-ext-jdk16-149.jar导入到%JDK_HOME%\jre\lib\ext目录下。 使用时需要将bcprov-jdk16-149.jar导入工程。 最后,我们只需要在初始化密钥工厂、密钥生成器等引擎类之前调用如下代码: //加入BouncyCastleProvider支持 Security.addProvider(new BouncyCastleProvider());
1-Base64: String str = "base64编码";
System.err.println("原文:\t"+str);
byte[] input = str.getBytes();
//Base64编码
byte[] data = Base64.encode(input);
System.err.println("编码后:\t"+new String(data));
//Base64解码
byte[] output = Base64.decode(data); System.err.println("解码后:\t"+new String(output)); 编码后的内容中,出现”=“符号,这是Base64编码的标志性符号。
2-UrlBase64: Base64算法最初用于电子邮件系统,后经演变成为显式传递URL参数的一种编码算法,通常称为”Url Base64”。他是Base64算法的变体,将字符映射表中用作补位的”=“换成”.”,并用”-“和”_”分别替换”+”和”/“,使得Base64编码符合URL参数规则。 String str = "Base64 编码";
System.err.println("原文:\t"+str);
byte[] input = str.getBytes();
//Base64编码
byte[] data = UrlBase64.encode(input);
System.err.println("编码后:\t"+new String(data));
//Base64解码
byte[] output = UrlBase64.decode(data); System.err.println("解码后:\t"+new String(output)); 编码后的内容中,出现了”.”符号,替换掉”=“符号,符合了URL参数规则 3-Hex Hex类用于十六进制转换。常配合消息摘要算法处理摘要值,以十六进制形式公示。 String str = "Hex 编码";
System.err.println("原文:\t"+str);
byte[] input = str.getBytes();
//Hex编码
byte[] data = Hex.encode(input);
System.err.println("编码后:\t"+new String(data));
//Hex解码
byte[] output = Hex.decode(data); System.err.println("解码后:\t"+new String(output)); Common Codec目前提供的加密组件包版本是1.4,这是一次重大的改进。
相关文章
- 暂无相关文章
用户点评