- 浏览: 194858 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (101)
- 职业 (4)
- 生活 (3)
- 场景应用 (6)
- flex (14)
- java (31)
- php (2)
- python (2)
- hadoop (6)
- 项目管理 (1)
- 工作流 (4)
- 手机web应用 (3)
- 算法 (4)
- 小技巧 (1)
- 数据库 (2)
- sphinx (1)
- web综合 (15)
- spring (5)
- 设计 (9)
- javascript (3)
- linux (2)
- 报表 (2)
- delphi (1)
- ejb (1)
- 架构 (3)
- uml (3)
- lucene (2)
- BI (1)
- 多线程 (1)
- 地图 (1)
- gis (1)
- 网络基础 (1)
- spark (2)
- 分布式 (3)
- ext (1)
- android (3)
- arduino (1)
- 协同办公 (2)
- OA流程 (2)
- 畅想 (1)
- ios (3)
- swift (1)
- webkit (1)
- c (1)
- 浏览器 (1)
- html5 (2)
- rtmp (1)
- soket (1)
- AI (2)
- tensorflow (1)
- ignite (1)
- react (4)
- 新空间 (2)
- 闲话 (3)
- docker (1)
- kubernetes (1)
最新评论
-
wenzhiyinghen:
...
spark 学习 -
zlbdexiaohao:
flex 写的时钟 -
minn84:
luoguohong88 写道你上传的那个openi.zip ...
openi1.3 eclipse 整合调试 -
luoguohong88:
你上传的那个openi.zip (5.5 MB)有问题 能再上 ...
openi1.3 eclipse 整合调试 -
minn84:
demo的思路很简单,主要是两点:1.hadoop负责处理数据 ...
hadoop+lucene+web 综合小demo
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PushbackReader;
import java.security.KeyStore;
import java.security.Principal;
import java.security.PrivateKey;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.util.Arrays;
import sun.security.x509.CertificateIssuerName;
import sun.security.x509.X500Name;
import sun.security.x509.X509CertImpl;
import sun.security.x509.X509CertInfo;
public class CertificateSigner {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String ksname=null;
String alias=null;
String inname=null;
String outname=null;
for(int i=0;i<args.length;i++)
{
if(args[i].equals("-keystore"))
ksname=args[++i];
else if(args[i].equals("-alias"))
alias=args[++i];
else if(args[i].equals("-infile"))
inname=args[++i];
else if(args[i].equals("-outfile"))
outname=args[++i];
else usage();
}
if(ksname==null||alias==null||inname==null||outname==null||outname==null)usage();
try
{
PushbackReader console=new PushbackReader(new InputStreamReader(System.in));
KeyStore store=KeyStore.getInstance("JKS","SUN");
InputStream in=new FileInputStream(ksname);
System.out.print("Keystore password:");
System.out.flush();
char[] password=readPassword(console);
store.load(in,password);
Arrays.fill(password,' ');
in.close();
System.out.println("Key password for "+alias+": ");
System.out.flush();
char[] keyPassword=readPassword(console);
PrivateKey issuerPrivateKey=(PrivateKey) store.getKey(alias, keyPassword);
Arrays.fill(keyPassword, ' ');
if(issuerPrivateKey==null)error("No such private key");
in=new FileInputStream(inname);
CertificateFactory factory=CertificateFactory.getInstance("X.509");
X509Certificate inCert=(X509Certificate) factory.generateCertificate(in);
in.close();
byte[] inCertBytes=inCert.getTBSCertificate();
X509Certificate issuerCert=(X509Certificate) store.getCertificate(alias);
Principal issuer=issuerCert.getSubjectDN();
String issuerSigAlg=issuerCert.getSigAlgName();
FileOutputStream out=new FileOutputStream(outname);
X509CertInfo info=new X509CertInfo(inCertBytes);
info.set(X509CertInfo.ISSUER, new CertificateIssuerName((X500Name)issuer));
X509CertImpl outCert=new X509CertImpl(info);
outCert.sign(issuerPrivateKey, issuerSigAlg);
outCert.derEncode(out);
out.close();
}catch(Exception e)
{
e.printStackTrace();
}
}
private static char[] readPassword(PushbackReader in)throws IOException
{
final int MAX_PASSWORD_LENGTH=100;
int length=0;
int flag=0;
char[] buffer=new char[MAX_PASSWORD_LENGTH];
while(true)
{
int ch=in.read();
if(ch=='\r'||ch=='\n'||ch==-1||length==MAX_PASSWORD_LENGTH)
{
if(ch=='\r')
{
ch=in.read();
if(ch!='\n'&&ch!=-1)
{
in.unread(ch);
}
if(length==0&&flag==0)
{
length=1;
}
char[] password=new char[length];
System.arraycopy(buffer, 0, password, 0, length);
if(length==0&&flag==0)
{
length=0;
flag=1;
}
//Arrays.fill(buffer,' ');
return password;
}else
{
buffer[length]=(char) ch;
length++;
}
}
}
}
private static void error(String message)
{
System.out.println(message);
System.exit(1);
}
private static void usage()
{
System.out.println("Usage:java CertificateSigner"+" -keystore keystore -alias issuerKeyAlias"+" -infile inputFile -outfile outputFile");
System.exit(1);
}
}
证书签名
1)javac *.java
创建一个密钥库
2)keytool -genkey -keystore czm.store -alias czm
导出证书文件
3)keytool -export -keystore czm.store -alias czm -file czm.cert
打印证书
4)keytool -printcert -file czm.cert
把证书输入密钥库中
5)keytool -import -keystore czm1.store alias czm1 -file czm.cert
把要签名的文档加入到jar中
6)jar cvf document.jar document.txt
将签名添加到文件中
7)jarsigner -keystore czm.store document.jar czm
客户端校验
8)jarsigner -verify -keystore czm1.store document.jar
签名匹配将会打印:java verified
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PushbackReader;
import java.security.KeyStore;
import java.security.Principal;
import java.security.PrivateKey;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.util.Arrays;
import sun.security.x509.CertificateIssuerName;
import sun.security.x509.X500Name;
import sun.security.x509.X509CertImpl;
import sun.security.x509.X509CertInfo;
public class CertificateSigner {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String ksname=null;
String alias=null;
String inname=null;
String outname=null;
for(int i=0;i<args.length;i++)
{
if(args[i].equals("-keystore"))
ksname=args[++i];
else if(args[i].equals("-alias"))
alias=args[++i];
else if(args[i].equals("-infile"))
inname=args[++i];
else if(args[i].equals("-outfile"))
outname=args[++i];
else usage();
}
if(ksname==null||alias==null||inname==null||outname==null||outname==null)usage();
try
{
PushbackReader console=new PushbackReader(new InputStreamReader(System.in));
KeyStore store=KeyStore.getInstance("JKS","SUN");
InputStream in=new FileInputStream(ksname);
System.out.print("Keystore password:");
System.out.flush();
char[] password=readPassword(console);
store.load(in,password);
Arrays.fill(password,' ');
in.close();
System.out.println("Key password for "+alias+": ");
System.out.flush();
char[] keyPassword=readPassword(console);
PrivateKey issuerPrivateKey=(PrivateKey) store.getKey(alias, keyPassword);
Arrays.fill(keyPassword, ' ');
if(issuerPrivateKey==null)error("No such private key");
in=new FileInputStream(inname);
CertificateFactory factory=CertificateFactory.getInstance("X.509");
X509Certificate inCert=(X509Certificate) factory.generateCertificate(in);
in.close();
byte[] inCertBytes=inCert.getTBSCertificate();
X509Certificate issuerCert=(X509Certificate) store.getCertificate(alias);
Principal issuer=issuerCert.getSubjectDN();
String issuerSigAlg=issuerCert.getSigAlgName();
FileOutputStream out=new FileOutputStream(outname);
X509CertInfo info=new X509CertInfo(inCertBytes);
info.set(X509CertInfo.ISSUER, new CertificateIssuerName((X500Name)issuer));
X509CertImpl outCert=new X509CertImpl(info);
outCert.sign(issuerPrivateKey, issuerSigAlg);
outCert.derEncode(out);
out.close();
}catch(Exception e)
{
e.printStackTrace();
}
}
private static char[] readPassword(PushbackReader in)throws IOException
{
final int MAX_PASSWORD_LENGTH=100;
int length=0;
int flag=0;
char[] buffer=new char[MAX_PASSWORD_LENGTH];
while(true)
{
int ch=in.read();
if(ch=='\r'||ch=='\n'||ch==-1||length==MAX_PASSWORD_LENGTH)
{
if(ch=='\r')
{
ch=in.read();
if(ch!='\n'&&ch!=-1)
{
in.unread(ch);
}
if(length==0&&flag==0)
{
length=1;
}
char[] password=new char[length];
System.arraycopy(buffer, 0, password, 0, length);
if(length==0&&flag==0)
{
length=0;
flag=1;
}
//Arrays.fill(buffer,' ');
return password;
}else
{
buffer[length]=(char) ch;
length++;
}
}
}
}
private static void error(String message)
{
System.out.println(message);
System.exit(1);
}
private static void usage()
{
System.out.println("Usage:java CertificateSigner"+" -keystore keystore -alias issuerKeyAlias"+" -infile inputFile -outfile outputFile");
System.exit(1);
}
}
证书签名
1)javac *.java
创建一个密钥库
2)keytool -genkey -keystore czm.store -alias czm
导出证书文件
3)keytool -export -keystore czm.store -alias czm -file czm.cert
打印证书
4)keytool -printcert -file czm.cert
把证书输入密钥库中
5)keytool -import -keystore czm1.store alias czm1 -file czm.cert
把要签名的文档加入到jar中
6)jar cvf document.jar document.txt
将签名添加到文件中
7)jarsigner -keystore czm.store document.jar czm
客户端校验
8)jarsigner -verify -keystore czm1.store document.jar
签名匹配将会打印:java verified
发表评论
-
多语言版基础管理系统展示[es6版]-入门配置篇
2018-10-26 07:17 517新增一篇入门配置文档 原文地址: http://www.i8 ... -
多语言版基础管理系统展示[es6版] -流程配置效果
2017-12-17 19:42 704终于找到一个可以较好展示工作流程配置的 ... -
多语言版基础管理系统展示[es6版]-简单整合spring+tensorflow+ignite+hadoop
2017-08-05 18:14 8121.整合基于[多语言版基础管理系统展示[es6版] ] ... -
多语言版基础管理系统展示[es6版]-简单整合tensorflow
2017-05-03 19:48 1002在大数据和AI渐渐兴起的时候,这是一个关于大 ... -
基于html5的websocket和rtmp协议的java socket服务器
2016-12-07 07:20 1056现代企事业单位中,会涉及到数据推送和获取服 ... -
多语言版基础管理系统展示[flash版]-hadoop+spark+spring简单整合
2016-06-18 21:36 4280本demo基于多语言版基础管理系统展示[fl ... -
ios简单的增删查例子
2015-02-23 16:08 834本例子分为两 ... -
spark 学习
2013-05-18 00:13 19168spark,又一个传说中的分布式实现,详情:ht ... -
基于rtmp协议的java多线程服务器
2013-03-31 21:34 3835打算设计这个半开源服务的计划已经有很长时间了,大 ... -
矩阵算法实现修改
2013-03-23 00:10 1000前段时间因为项目需要,需要实现一个据说是某高 ... -
hadoop+lucene+web 综合小demo
2013-03-02 01:28 13707很长一段时间没有关注hadoop,突然间有兴致,于是动手又 ... -
ejb3.x 简单小 demo
2012-02-21 21:07 1160本demo适合有一定编程经验的自学者 ,简单易懂,涉及数据 ... -
java综合
2012-02-11 22:00 1426以下自定义的简单类中,分析涉及的基础知识 / ... -
java nio应用 aes字符串加密与解密
2010-08-18 22:36 1958import java.io.IOException; imp ... -
java excel内容转换为键/值对基本通用方法与数据库导入
2010-06-01 23:28 1680有时候我们需要从execel中导入大量的数据,编程过程中就遇到 ... -
简单servlet socket 整合
2010-05-05 21:52 4337package filter; import java.io ... -
java写的简单生成sql语句的工具方法
2010-04-20 23:02 3428jdbc编程中,最麻烦的是拼sql语句,尤其是字段太多的时候, ... -
基于rtmp协议用java nio写小型游戏服务器的总结3
2010-03-05 20:59 2152在flex使用rtmp协议进行连接的时候,有个握手的过程,详情 ... -
基于rtmp协议用java nio写小型游戏服务器的总结2
2010-03-04 21:41 2271今天介绍一下学习rtmp的过程,首先当然是baidu和goog ... -
基于rtmp协议用java nio写小型游戏服务器的总结1
2010-03-03 22:55 2483前一阵子,进了一家公司,工作的内容是写基于rtmp协议的jav ...
相关推荐
java数字签名(签名生成,用证书验证签名)
Java签名证书信息查看工具。查看通过java keytool 命令生成的key文件的信息。
Java开发的数字证书、数字签名模块源码。
java数字签名(签名生成,用证书验证签名)[汇编].pdf
java 国密算法实现,包含SM2 SM3 SM4和数字签名、数字证书的验证以及相应的说明文档
java数字签名(签名生成,用证书验证签名)[定义].pdf
Java 数字签名、数字证书生成源码
Java实现浏览器CA证书的签名和验证,提高java应用的安全
CFCA证书环境Java安装,适用于金融业平台的统一登录
本项目是基于java标准加签验签加密解密开发此工程可直接二次开发测试
此文件包含生成android签名文件keystore及验证的源码还包含生成的keystore文件。放到项目中即可使用
Java 数字签名、数字证书生成源码.7z
Java 数字签名、数字证书生成源码
依托Bouncycastle库创建pkcs12格式数字签名证书的Java代码,具体应用方法可以参考本人翻译的博客《通过Java编程创建X.509格式的数字签名证书》。
电脑上存储的工作过程中发现的Java代码工具包,既有Swing程序也有工具类!工具类可以节约敲代码数据,有用的直接用就好。
本示例通过java自动生成pfx证书,根据生成的证书,自动实现对pdf文件的电子签名
System.err.println("私钥签名——公钥验证签名"); // 产生签名 String sign = CertificateUtils.signToBase64(data.getBytes("utf-8"), keyStorePath, alias, password); System.out.println("私钥签名:" + ...
创建数字证书,更新数字证书,RSA私钥签名,公钥解密,验证数字签名,合并图章到另找一张图片