文档章节

Java加密技术(八)

apsaras
 apsaras
发布于 2016/06/20 09:42
字数 890
阅读 6
收藏 0

在构建Java代码实现前,我们需要完成证书的制作。 
1.生成keyStroe文件 
在命令行下执行以下命令: 

Shell代码    收藏代码
  1. keytool -genkey -validity 36000 -alias www.zlex.org -keyalg RSA -keystore d:\zlex.keystore  


其中  
-genkey表示生成密钥  
-validity指定证书有效期,这里是 36000 
-alias指定别名,这里是 www.zlex.org  
-keyalg指定算法,这里是 RSA  
-keystore指定存储位置,这里是 d:\zlex.keystore  

在这里我使用的密码为   123456  

控制台输出:  
Console代码    收藏代码
  1. 输入keystore密码:  
  2. 再次输入新密码:  
  3. 您的名字与姓氏是什么?  
  4.   [Unknown]:  www.zlex.org  
  5. 您的组织单位名称是什么?  
  6.   [Unknown]:  zlex  
  7. 您的组织名称是什么?  
  8.   [Unknown]:  zlex  
  9. 您所在的城市或区域名称是什么?  
  10.   [Unknown]:  BJ  
  11. 您所在的州或省份名称是什么?  
  12.   [Unknown]:  BJ  
  13. 该单位的两字母国家代码是什么  
  14.   [Unknown]:  CN  
  15. CN=www.zlex.org, OU=zlex, O=zlex, L=BJ, ST=BJ, C=CN 正确吗?  
  16.   [否]:  Y  
  17.   
  18. 输入<tomcat>的主密码  
  19.         (如果和 keystore 密码相同,按回车):  
  20. 再次输入新密码:  

这时,在D盘下会生成一个zlex.keystore的文件。  

2.生成自签名证书  
光有keyStore文件是不够的,还需要证书文件,证书才是直接提供给外界使用的公钥凭证。  
导出证书:  
Shell代码    收藏代码
  1. keytool -export -keystore d:\zlex.keystore -alias www.zlex.org -file d:\zlex.cer -rfc  


其中  
-export指定为导出操作  
-keystore指定 keystore文件  
-alias指定导出 keystore文件中的别名  
-file指向 导出路径  
-rfc以文本格式输出,也就是以 BASE64编码输出  
这里的密码是   123456  

控制台输出:  
Console代码    收藏代码
  1. 输入keystore密码:  
  2. 保存在文件中的认证 <d:\zlex.cer>  


当然,使用方是需要导入证书的!  
可以通过自签名证书完成CAS单点登录系统的构建!  

Ok,准备工作完成,开始Java实现!  

通过java代码实现如下: Coder类见 Java加密技术(一)  
Java代码    收藏代码
  1. import java.io.FileInputStream;  
  2. import java.security.KeyStore;  
  3. import java.security.PrivateKey;  
  4. import java.security.PublicKey;  
  5. import java.security.Signature;  
  6. import java.security.cert.Certificate;  
  7. import java.security.cert.CertificateFactory;  
  8. import java.security.cert.X509Certificate;  
  9. import java.util.Date;  
  10.   
  11. import javax.crypto.Cipher;  
  12.   
  13. /** 
  14.  * 证书组件 
  15.  *  
  16.  * @author 梁栋 
  17.  * @version 1.0 
  18.  * @since 1.0 
  19.  */  
  20. public abstract class CertificateCoder extends Coder {  
  21.   
  22.   
  23.     /** 
  24.      * Java密钥库(Java Key Store,JKS)KEY_STORE 
  25.      */  
  26.     public static final String KEY_STORE = "JKS";  
  27.   
  28.     public static final String X509 = "X.509";  
  29.   
  30.     /** 
  31.      * 由KeyStore获得私钥 
  32.      *  
  33.      * @param keyStorePath 
  34.      * @param alias 
  35.      * @param password 
  36.      * @return 
  37.      * @throws Exception 
  38.      */  
  39.     private static PrivateKey getPrivateKey(String keyStorePath, String alias,  
  40.             String password) throws Exception {  
  41.         KeyStore ks = getKeyStore(keyStorePath, password);  
  42.         PrivateKey key = (PrivateKey) ks.getKey(alias, password.toCharArray());  
  43.         return key;  
  44.     }  
  45.   
  46.     /** 
  47.      * 由Certificate获得公钥 
  48.      *  
  49.      * @param certificatePath 
  50.      * @return 
  51.      * @throws Exception 
  52.      */  
  53.     private static PublicKey getPublicKey(String certificatePath)  
  54.             throws Exception {  
  55.         Certificate certificate = getCertificate(certificatePath);  
  56.         PublicKey key = certificate.getPublicKey();  
  57.         return key;  
  58.     }  
  59.   
  60.     /** 
  61.      * 获得Certificate 
  62.      *  
  63.      * @param certificatePath 
  64.      * @return 
  65.      * @throws Exception 
  66.      */  
  67.     private static Certificate getCertificate(String certificatePath)  
  68.             throws Exception {  
  69.         CertificateFactory certificateFactory = CertificateFactory  
  70.                 .getInstance(X509);  
  71.         FileInputStream in = new FileInputStream(certificatePath);  
  72.   
  73.         Certificate certificate = certificateFactory.generateCertificate(in);  
  74.         in.close();  
  75.   
  76.         return certificate;  
  77.     }  
  78.   
  79.     /** 
  80.      * 获得Certificate 
  81.      *  
  82.      * @param keyStorePath 
  83.      * @param alias 
  84.      * @param password 
  85.      * @return 
  86.      * @throws Exception 
  87.      */  
  88.     private static Certificate getCertificate(String keyStorePath,  
  89.             String alias, String password) throws Exception {  
  90.         KeyStore ks = getKeyStore(keyStorePath, password);  
  91.         Certificate certificate = ks.getCertificate(alias);  
  92.   
  93.         return certificate;  
  94.     }  
  95.   
  96.     /** 
  97.      * 获得KeyStore 
  98.      *  
  99.      * @param keyStorePath 
  100.      * @param password 
  101.      * @return 
  102.      * @throws Exception 
  103.      */  
  104.     private static KeyStore getKeyStore(String keyStorePath, String password)  
  105.             throws Exception {  
  106.         FileInputStream is = new FileInputStream(keyStorePath);  
  107.         KeyStore ks = KeyStore.getInstance(KEY_STORE);  
  108.         ks.load(is, password.toCharArray());  
  109.         is.close();  
  110.         return ks;  
  111.     }  
  112.   
  113.     /** 
  114.      * 私钥加密 
  115.      *  
  116.      * @param data 
  117.      * @param keyStorePath 
  118.      * @param alias 
  119.      * @param password 
  120.      * @return 
  121.      * @throws Exception 
  122.      */  
  123.     public static byte[] encryptByPrivateKey(byte[] data, String keyStorePath,  
  124.             String alias, String password) throws Exception {  
  125.         // 取得私钥  
  126.         PrivateKey privateKey = getPrivateKey(keyStorePath, alias, password);  
  127.   
  128.         // 对数据加密  
  129.         Cipher cipher = Cipher.getInstance(privateKey.getAlgorithm());  
  130.         cipher.init(Cipher.ENCRYPT_MODE, privateKey);  
  131.   
  132.         return cipher.doFinal(data);  
  133.   
  134.     }  
  135.   
  136.     /** 
  137.      * 私钥解密 
  138.      *  
  139. border-left: #d1d7dc 1px solid; padding-bottom: 0px
分享到:
参考知识库
Java SE知识库 11108  关注 | 450  收录
Java Web知识库 11526  关注 | 1131  收录
Java EE知识库 3030  关注 | 616  收录
JavaScript知识库 3347  关注 | 831  收录
评论

本文转载自:http://jportal.iteye.com/blog/1036596

apsaras
粉丝 8
博文 90
码字总数 0
作品 0
海淀
架构师
私信 提问
Java学习手册:Java网络编程面试问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 https://blog.csdn.net/MaybeForever/article/details/95471329 1、Java学习手册:Java基础知...

浩比浩比
08/27
0
0
mysql中时间数据差14小时

问题 调试代码中,确定了出来的时间数据是准确了,没有出现差14小时情况,通过Spring hibernate jdbc这一路保存到mysql数据库中,就出现了14小时问题。 排查 mysql排查 到这里,基本上排除了...

亚林瓜子
2018/12/18
539
0
Java程序的加密和反加密

写在前面的话:写这篇文档的目的是让大家能更深入的了解 Java技术,而不是教你怎么去破解Java程序;武器没有罪过,要看是好人用它还是坏人用它。 首先我们来看看Java程序的反加密,也就是通常...

andogo
2014/05/15
376
0
(转)防止java反编译的一些常用方法

常用的保护技术 由于Java字节码的抽象级别较高,因此它们较容易被反编译。本节介绍了几种常用的方法,用于保护Java字节码不被反编译。通常,这些方法不能够绝对防止程序被反编译,而是加大反...

猴子
2011/10/31
717
0
《Java程序员由笨鸟到菜鸟》电子版书正式发布,欢迎大家下载

在众多朋友的支持和鼓励下,《Java程序员由菜鸟到笨鸟》电子版终于和大家见面了。本电子书涵盖了从java基础到javaweb开放框架的大部分内容。在编写的过程中,难免会出现一些错误,希望大家能...

长平狐
2012/11/12
275
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS 7 查找软件安装位置的方法

1、通过文件搜索查找 root@jun-virtual-machine:# find / -name "*squid*"/var/log/squid/var/spool/squid/var/lib/yum/yumdb/s/48a7dbee62d6d5962ed739a8e4fc117cf7378bfd-squid-3.5......

webcreazy
28分钟前
6
0
eureka 加入密码认证 springboot-admin 加入密码认证

1. pom.xml 加入依赖 <!-- 加入密码认证 --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</ar......

java框架开发者
32分钟前
5
0
数字在排序数组中出现的次数

Input:nums = 1, 2, 3, 3, 3, 3, 4, 6K = 3Output:4 二分查找的练习 public int GetNumberOfK(int[] nums, int K) { int first = binarySearch(nums, K); int last = b......

Garphy
43分钟前
6
0
大厂面试经:高频率JVM面试问题整理!

JVM(Java虚拟机)简单来说就是运行Java代码的解释器,作为螺丝钉程序员JVM其实了解下就差不多啦,不懂JVM内部细节照样能写出优质的代码!但是一到造火箭、飞机的场景(面试)不懂JVM的你,会...

架构文摘
59分钟前
9
0
thinkphp5.1学习过程五——request

<?phpnamespace app\index\controller;//use \think\facade\Request;use \think\Request;/** * Class Demo3 * @package app\index\controller * 正常情况下,控制器不依赖......

大海yht
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部