本文将分享JAVA对数字证书的常用操作(转载)的详细内容,并且还将对java数字证书登录进行详尽解释,此外,我们还将为大家带来关于codeigniter对数据库的常用操作、HTTPS与SSL数字证书的
本文将分享JAVA对数字证书的常用操作(转载)的详细内容,并且还将对java数字证书登录进行详尽解释,此外,我们还将为大家带来关于codeigniter 对数据库的常用操作、HTTPS与SSL数字证书的必要性、Java 中对 Array 数组的常用操作、Java 中数字证书的生成及维护方法的相关知识,希望对你有所帮助。
本文目录一览:- JAVA对数字证书的常用操作(转载)(java数字证书登录)
- codeigniter 对数据库的常用操作
- HTTPS与SSL数字证书的必要性
- Java 中对 Array 数组的常用操作
- Java 中数字证书的生成及维护方法
JAVA对数字证书的常用操作(转载)(java数字证书登录)
一:需要包含的包

import java.security. * ;
import java.io. * ;
import java.util. * ;
import java.security. * ;
import java.security.cert. * ;
import sun.security.x509. *
import java.security.cert.Certificate;
import java.security.cert.CertificateFactory;
二:从文件中读取证书
用keytool将.keystore中的证书写入文件中,然后从该文件中读取证书信息

CertificateFactory cf = CertificateFactory.getInstance( " X.509 " );
FileInputStream in = new FileInputStream( " out.csr " );
Certificate c = cf.generateCertificate(in);
String s = c.toString();


三:从密钥库中直接读取证书

String pass = " 123456 " ;
FileInputStream in = new FileInputStream( " .keystore " );
KeyStore ks = KeyStore.getInstance( " JKS " );
ks.load(in,pass.toCharArray());
java.security.cert.Certificate c = ks.getCertificate(alias); // alias为
条目的别名

四:JAVA程序中显示证书指定信息
System.out.println( " 输出证书信息:\n " + c.toString());
System.out.println( " 版本号: " + t.getVersion());
System.out.println( " 序列号: " + t.getSerialNumber().toString( 16 ));
System.out.println( " 主体名: " + t.getSubjectDN());
System.out.println( " 签发者: " + t.getIssuerDN());
System.out.println( " 有效期: " + t.getNotBefore());
System.out.println( " 签名算法: " + t.getSigAlgName());
byte [] sig = t.getSignature(); // 签名值
PublicKey pk = t.getPublicKey();
byte [] pkenc = pk.getEncoded();
System.out.println( " 公钥 " );
for ( int i = 0 ;i < pkenc.length;i ++ )System.out.print(pkenc[i] + " , " );


五:JAVA程序列出密钥库所有条目

String pass = " 123456 " ;
FileInputStream in = new FileInputStream( " .keystore " );
KeyStore ks = KeyStore.getInstance( " JKS " );
ks.load(in,pass.toCharArray());
Enumeration e = ks.aliases();
while (e.hasMoreElements())
java.security.cert.Certificate c = ks.getCertificate((String)e.nextElement());

六:JAVA程序修改密钥库口令

String oldpass = " 123456 " ;
String newpass = " 654321 " ;
FileInputStream in = new FileInputStream( " .keystore " );
KeyStore ks = KeyStore.getInstance( " JKS " );
ks.load(in,oldpass.toCharArray());
in.close();
FileOutputStream output = new FileOutputStream( " .keystore " );
ks.store(output,newpass.toCharArray());
output.close();

七:JAVA程序修改密钥库条目的口令及添加条目

FileInputStream in = new FileInputStream( " .keystore " );
KeyStore ks = KeyStore.getInstance( " JKS " );
ks.load(in,storepass.toCharArray());
Certificate [] cchain = ks.getCertificate(alias);获取别名对应条目的证书链
PrivateKey pk = (PrivateKey)ks.getKey(alias,oldkeypass.toCharArray());获取别名对应条目的私钥
ks.setKeyEntry(alias,pk,newkeypass.toCharArray(),cchain);向密钥库中添加条目
第一个参数指定所添加条目的别名,假如使用已存在别名将覆盖已存在条目,使用新别名将增加一个新条目,第二个参数为条目的私钥,第三个为设置的新口令,第四个为该私钥的公钥的证书链
FileOutputStream output=new FileOutputStream("another");
ks.store(output,storepass.toCharArray())将keystore对象内容写入新文件
八:JAVA程序检验别名和删除条目
FileInputStream in = new FileInputStream( " .keystore " );
KeyStore ks = KeyStore.getInstance( " JKS " );
ks.load(in,storepass.toCharArray());
ks.containsAlias( " sage " );检验条目是否在密钥库中,存在返回true
ks.deleteEntry( " sage " );删除别名对应的条目
FileOutputStream output = new FileOutputStream( " .keystore " );
ks.store(output,storepass.toCharArray())将keystore对象内容写入文件,条目删除成功
九:JAVA程序签发数字证书
(1)从密钥库中读取CA的证书

FileInputStream in = new FileInputStream( " .keystore " );
KeyStore ks = KeyStore.getInstance( " JKS " );
ks.load(in,storepass.toCharArray());
java.security.cert.Certificate c1 = ks.getCertificate( " caroot " );
(2)从密钥库中读取CA的私钥
PrivateKey caprk = (PrivateKey)ks.getKey(alias,cakeypass.toCharArray());
(3)从CA的证书中提取签发者的信息

byte [] encod1 = c1.getEncoded(); 提取CA证书的编码
X509CertImpl cimp1 = new X509CertImpl(encod1); 用该编码创建X509CertImpl类型对象
X509CertInfo cinfo1 = (X509CertInfo)cimp1.get(X509CertImpl.NAME + " . " + X509CertImpl.INFO); 获取X509CertInfo对象
X500Name issuer = (X500Name)cinfo1.get(X509CertInfo.SUBJECT + " . " + CertificateIssuerName.DN_NAME); 获取X509Name类型的签发者信息
(4)获取待签发的证书
CertificateFactory cf = CertificateFactory.getInstance( " X.509 " );
FileInputStream in2 = new FileInputStream( " user.csr " );
java.security.cert.Certificate c2 = cf.generateCertificate(in);
(5)从待签发的证书中提取证书信息
byte [] encod2 = c2.getEncoded();
X509CertImpl cimp2 = new X509CertImpl(encod2); 用该编码创建X509CertImpl类型对象
X509CertInfo cinfo2 = (X509CertInfo)cimp2.get(X509CertImpl.NAME + " . " + X509CertImpl.INFO); 获取X509CertInfo对象
(6)设置新证书有效期
Date begindate = new Date(); 获取当前时间
Date enddate = new Date(begindate.getTime() + 3000 * 24 * 60 * 60 * 1000L ); 有效期为3000天
CertificateValidity cv = new CertificateValidity(begindate,enddate); 创建对象
cinfo2.set(X509CertInfo.VALIDITY,cv); 设置有效期
(7)设置新证书序列号
int sn = ( int )(begindate.getTime() / 1000 ); 以当前时间为序列号
CertificateSerialNumber csn = new CertificateSerialNumber(sn);
cinfo2.set(X509CertInfo.SERIAL_NUMBER,csn);
(8)设置新证书签发者
cinfo2.set(X509CertInfo.ISSUER+"."+CertificateIssuerName.DN_NAME,issuer);应用第三步的结果
(9)设置新证书签名算法信息
AlgorithmId algorithm=new AlgorithmId(AlgorithmId.md5WithRSAEncryption_oid);
cinfo2.set(CertificateAlgorithmId.NAME+"."+CertificateAlgorithmId.ALGORITHM,algorithm);
(10)创建证书并使用CA的私钥对其签名
X509CertImpl newcert=new X509CertImpl(cinfo2);
newcert.sign(caprk,"MD5WithRSA"); 使用CA私钥对其签名
(11)将新证书写入密钥库
ks.setCertificateEntry( " lf_signed " ,newcert);
FileOutputStream out = new FileOutputStream( " newstore " );
ks.store(out, " newpass " .toCharArray()); 这里是写入了新的密钥库,也可以使用第七条来增加条目
十:数字证书的检验
(1)验证证书的有效期
(a)获取X509Certificate类型对象
CertificateFactory cf = CertificateFactory.getInstance( " X.509 " );
FileInputStream in1 = new FileInputStream( " aa.crt " );
java.security.cert.Certificate c1 = cf.generateCertificate(in1);
X509Certificate t = (X509Certificate)c1;
in2.close();
(b)获取日期
Date TimeNow=new Date();
(c)检验有效性
try {
t.checkValidity(TimeNow);
System.out.println( " OK " );
} catch (CertificateExpiredException e) { // 过期
System.out.println( " Expired " );
System.out.println(e.getMessage());
} catch ((CertificateNotYetValidException e) { // 尚未生效
System.out.println( " Too early " );
System.out.println(e.getMessage());}
(2)验证证书签名的有效性
(a)获取CA证书
CertificateFactory cf = CertificateFactory.getInstance( " X.509 " );
FileInputStream in2 = new FileInputStream( " caroot.crt " );
java.security.cert.Certificate cac = cf.generateCertificate(in2);
in2.close();
(c)获取CA的公钥
PublicKey pbk=cac.getPublicKey();
(b)获取待检验的证书(上步已经获取了,就是C1)
(c)检验证书
boolean pass = false ;
try {
c1.verify(pbk);
pass = true ;
} catch (Exception e) {
pass = false ;
System.out.println(e);
}
转载地址:http://www.blogjava.net/ctguzhupan/archive/2006/04/26/63177.html

codeigniter 对数据库的常用操作
http://www.thenbsp.com/view-codeigniter-database/ codeigniter(CI)是一个优秀、敏捷的PHP开源框架,尤其封装了对数据库的操作,很方便,以下是phpci常用的数据库操作,作个记录: /* ================================== 查询 $query = $this-db_query(SE
http://www.thenbsp.com/view-codeigniter-database/
codeigniter (CI)是一个优秀、敏捷的PHP开源框架,尤其封装了对数据库的操作,很方便,以下是php ci常用的数据库操作,作个记录:
/* ================================== 查询 $query = $this->db_query("SELECT * FROM table"); ================================== */ //result() 返回对象数组 $data = $query->result(); //result_array() 返回数据 $data = $query->result_array(); //row() 只返回一行对象数组 $data = $query->row(); //num_rows() 返回查询结果行数 $data = $query->num_rows(); //num_fields() 返回查询请求的字段个数 $data = $query->num_fields(); //row_array() 只返回一行数组 $data = $query->row_array(); //free_result() 释放当前查询所占用的内存并删除关联资源标识 $data = $query->free_result(); /* ================================== 插入操作 ================================== */ //上次插入操作生成的ID echo $this->db->insert_id(); //写入和更新操作被影响的行数 echo $this->db->affected_rows(); //返回指定表的总行数 echo $this->db->count_all(''table_name''); //输出当前的数据库版本号 echo $this->db->version(); //输出当前的数据库平台 echo $this->db->platform(); //返回最后运行的查询语句 echo $this->db->last_query(); //插入数据,被插入的数据会被自动转换和过滤,例如: //$data = array(''name'' => $name, ''email'' => $email, ''url'' => $url); $this->db->insert_string(''table_name'', $data); /* ================================== 更新操作 ================================== */ //更新数据,被更新的数据会被自动转换和过滤,例如: //$data = array(''name'' => $name, ''email'' => $email, ''url'' => $url); //$where = "author_id = 1 AND status = ''active''"; $this->db->update_string(''table_name'', $data, $where); /* ================================== 选择数据 ================================== */ //获取表的全部数据 $this->db->get(''table_name''); //第二个参数为输出条数,第三个参数为开始位置 $this->db->get(''table_name'', 10, 20); //获取数据,第一个参数为表名,第二个为获取条件,第三个为条数 $this->db->get_where(''table_name'', array(''id''=>$id), $offset); //select方式获取数据 $this->db->select(''title, content, date''); $data = $this->db->get(''table_name''); //获取字段的最大值,第二个参数为别名,相当于max(age) AS nianling $this->db->select_max(''age''); $this->db->select_max(''age'', ''nianling''); //获取字段的最小值 $this->db->select_min(''age''); $this->db->select_min(''age'', ''nianling''); //获取字段的和 $this->db->select_sum(''age''); $this->db->select_sum(''age'', ''nianling''); //自定义from表 $this->db->select(''title'', content, date''); $this->db->from(''table_name''); //查询条件 WHERE name = ''Joe'' AND title = ''boss'' AND status = ''active'' $this->db->where(''name'', $name); $this->db->where(''title'', $title); $this->db->where(''status'', $status); //范围查询 $this->db->where_in(''item1'', ''item2''); $this->db->where_not_in(''item1'', ''item2''); //匹配,第三个参数为匹配模式 title LIKE ''%match%'' $this->db->like(''title'', ''match'', ''before/after/both''); $this->db->not_like(); //分组 GROUP BY title, date $this->db->group_by(''title'', ''date''); //限制条数 $this->db->limit(0, 20);
HTTPS与SSL数字证书的必要性
HTTPS SSL证书申请:http://cn.globalsign.com
HTTPS (Secure Hypertext Transfer Protocol)
安全超文本传输协议
HTTPS 是由Netscape开发并内置于其浏览器中,用于对数据进行压缩和解压操作,并返回网络上传送回的结果。HTTPS实际上应用了Netscape的 完全套接字层(SSL)作为HTTP应用层的子层。(HTTPS使用端口443,而不是象HTTP那样使用端口80来和TCP/IP进行通信。)SSL使用40 位关键字作为RC4流加密算法,这对于商业信息的加密是合适的。
假设您使用Netscape浏览器访问一个如NetPlaza的站点,并且观看其商品类目。当您希望定购商品时,您可以通过URL进行,单击“发送”,将相应的订单发送到供应商那里,浏览器的HTTPS层将对信息进行加密。从服务器返回的加密信息也是经过加密的,在您服务器的HTTPS层进行解密后显示。
HTTPS和SSL支持使用X.509数字认证,这样(如果需要的话),用户可以确认发送者是谁。SSL是一个开放的协议。
注意:HTTPS不要和由EIT开发的SHTTP混淆起来。
HTTPS是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换信息。它使用安全套接字层(SSL)进行信息交换,简单来说它是HTTP的安全版。
SSL是一种国际标准的加密及身份认证通信协议,您用的浏览器就支持此协议。SSL(Secure Sockets Layer)最初是由美国Netscape公司研究出来的,后来成为了Internet网上安全通讯与交易的标准。SSL协议使用通讯双方的客户证书以及CA根证书,允许客户/服务器应用以一种不能被偷听的方式通讯,在通讯双方间建立起了一条安全的、可信任的通讯通道。它具备以下基本特征:信息保密性、信息完整性、相互鉴定。
Java 中对 Array 数组的常用操作
目录:
- 声明数组;
- 初始化数组;
- 查看数组长度;
- 遍历数组;
- int 数组转成 string 数组;
- 从 array 中创建 arraylist;
- 数组中是否包含某一个值;
- 将数组转成 set 集合;
- 将数组转成 list 集合;
- Arrays.fill () 填充数组;
- 数组排序;
- 复制数组;
- 比较两个数组;
- 去重复;
- 查询数组中的最大值和最小值;
备注:文内代码具有关联性。
1. 声明数组;
1 2 3 4 |
|
2. 初始化数组;
1 2 3 4 5 6 7 8 9 10 |
|
3. 查看数组长度;
1 2 |
|
4. 遍历数组;
1 2 3 |
|
5.int 数组转成 string 数组;
1 2 3 |
|
6. 从 array 中创建 arraylist;
1 2 |
|
7. 数组中是否包含某一个值;
1 2 3 4 5 |
|
8. 将数组转成 set 集合;
1 2 3 |
|
9. 将数组转成 list 集合;
1 2 3 4 5 6 7 8 9 10 11 |
|
10.Arrays.fill () 填充数组;
1 2 3 4 5 6 |
|
11. 数组排序;
1 2 3 4 5 6 7 8 9 10 11 12 |
|
12. 复制数组;
1 2 3 4 5 6 7 8 |
|
13. 比较两个数组;
1 2 3 |
|
14. 去重复;
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
15. 查询数组中的最大值和最小值;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
Java 中数字证书的生成及维护方法
持续更新中。
关于JAVA对数字证书的常用操作(转载)和java数字证书登录的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于codeigniter 对数据库的常用操作、HTTPS与SSL数字证书的必要性、Java 中对 Array 数组的常用操作、Java 中数字证书的生成及维护方法等相关内容,可以在本站寻找。
本文标签: