GVKun编程网logo

JAVA对数字证书的常用操作(转载)(java数字证书登录)

11

本文将分享JAVA对数字证书的常用操作(转载)的详细内容,并且还将对java数字证书登录进行详尽解释,此外,我们还将为大家带来关于codeigniter对数据库的常用操作、HTTPS与SSL数字证书的

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

本文目录一览:

JAVA对数字证书的常用操作(转载)(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 对数据库的常用操作

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-&gt;db_query("SELECT * FROM table");
 ==================================
*/
 
//result() 返回对象数组
$data = $query-&gt;result();
 
//result_array() 返回数据 
$data = $query-&gt;result_array();
 
//row() 只返回一行对象数组
$data = $query-&gt;row();
 
//num_rows() 返回查询结果行数
$data = $query-&gt;num_rows();
 
//num_fields() 返回查询请求的字段个数
$data = $query-&gt;num_fields();
 
//row_array() 只返回一行数组
$data = $query-&gt;row_array();
 
//free_result() 释放当前查询所占用的内存并删除关联资源标识
$data = $query-&gt;free_result();
 
/*
 ==================================
 插入操作
 ==================================
*/
 
//上次插入操作生成的ID
echo $this-&gt;db-&gt;insert_id();
 
//写入和更新操作被影响的行数
echo $this-&gt;db-&gt;affected_rows();
 
//返回指定表的总行数
echo $this-&gt;db-&gt;count_all(''table_name'');
 
//输出当前的数据库版本号
echo $this-&gt;db-&gt;version();
 
//输出当前的数据库平台
echo $this-&gt;db-&gt;platform();
 
//返回最后运行的查询语句
echo $this-&gt;db-&gt;last_query();
 
//插入数据,被插入的数据会被自动转换和过滤,例如:
//$data = array(''name'' =&gt; $name, ''email'' =&gt; $email, ''url'' =&gt; $url);
$this-&gt;db-&gt;insert_string(''table_name'', $data);
 
/*
 ==================================
 更新操作
 ==================================
*/
 
//更新数据,被更新的数据会被自动转换和过滤,例如:
//$data = array(''name'' =&gt; $name, ''email'' =&gt; $email, ''url'' =&gt; $url);
//$where = "author_id = 1 AND status = ''active''";
$this-&gt;db-&gt;update_string(''table_name'', $data, $where);
 
/*
 ==================================
 选择数据
 ==================================
*/
 
//获取表的全部数据
$this-&gt;db-&gt;get(''table_name'');
 
//第二个参数为输出条数,第三个参数为开始位置
$this-&gt;db-&gt;get(''table_name'', 10, 20);
 
//获取数据,第一个参数为表名,第二个为获取条件,第三个为条数
$this-&gt;db-&gt;get_where(''table_name'', array(''id''=&gt;$id), $offset);
 
//select方式获取数据
$this-&gt;db-&gt;select(''title, content, date'');
$data = $this-&gt;db-&gt;get(''table_name'');
 
//获取字段的最大值,第二个参数为别名,相当于max(age) AS nianling
$this-&gt;db-&gt;select_max(''age'');
$this-&gt;db-&gt;select_max(''age'', ''nianling'');
 
//获取字段的最小值
$this-&gt;db-&gt;select_min(''age'');
$this-&gt;db-&gt;select_min(''age'', ''nianling'');
 
//获取字段的和
$this-&gt;db-&gt;select_sum(''age'');
$this-&gt;db-&gt;select_sum(''age'', ''nianling'');
 
//自定义from表
$this-&gt;db-&gt;select(''title'', content, date'');
$this-&gt;db-&gt;from(''table_name'');
 
//查询条件 WHERE name = ''Joe'' AND title = ''boss'' AND status = ''active''
$this-&gt;db-&gt;where(''name'', $name);
$this-&gt;db-&gt;where(''title'', $title);
$this-&gt;db-&gt;where(''status'', $status);
 
//范围查询
$this-&gt;db-&gt;where_in(''item1'', ''item2'');
$this-&gt;db-&gt;where_not_in(''item1'', ''item2'');
 
//匹配,第三个参数为匹配模式 title LIKE ''%match%''
$this-&gt;db-&gt;like(''title'', ''match'', ''before/after/both'');
$this-&gt;db-&gt;not_like();
 
//分组 GROUP BY title, date
$this-&gt;db-&gt;group_by(''title'', ''date'');
 
//限制条数
$this-&gt;db-&gt;limit(0, 20);
登录后复制

HTTPS与SSL数字证书的必要性

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 数组的常用操作

Java 中对 Array 数组的常用操作

目录:

  1. 声明数组;
  2. 初始化数组;
  3. 查看数组长度;
  4. 遍历数组;
  5. int 数组转成 string 数组;
  6. 从 array 中创建 arraylist;
  7. 数组中是否包含某一个值;
  8. 将数组转成 set 集合;
  9. 将数组转成 list 集合;
  10. Arrays.fill () 填充数组;
  11. 数组排序;
  12. 复制数组;
  13. 比较两个数组;
  14. 去重复;
  15. 查询数组中的最大值和最小值;

备注:文内代码具有关联性。

1. 声明数组;

1

2

3

4

String [] arr;

int arr1[];

String[] array=new String[5];

int score[]=new int[3];

 

2. 初始化数组;

1

2

3

4

5

6

7

8

9

10

//静态初始化

int arr2[]=new int[]{1,2,3,4,5};

String[] array1={"马超","马云","关羽","刘备","张飞"};

String[] array2=new String[]{"黄渤","张艺兴","孙红雷","小猪","牙哥","黄磊"};

int score[]=new int[3];

//动态初始化

for(int i=0;i<score.length;i++)

{   

  score[i]=i+1

}

 

 

3. 查看数组长度;

1

2

int length=array1.length;

System.out.println("length:  "+array1.length);

 

4. 遍历数组;

1

2

3

for (int i = 0; i < array1.length; i++) {

    System.out.println(array1[i]);

}

 

5.int 数组转成 string 数组;

1

2

3

int[]  array3={1,2,3,4,5,6,7,8,9,0};

        String arrStrings=Arrays.toString(array3);

        System.out.println(arrStrings);

 

 6. 从 array 中创建 arraylist;

1

2

ArrayList<String> arrayList=new ArrayList<String>(Arrays.asList(array1));

System.out.println(arrayList);

 

7. 数组中是否包含某一个值;

1

2

3

4

5

String a="马超";

String[] array1={"马超","马云","关羽","刘备","张飞"};

if (Arrays.asList(array1).contains(a)) {

    System.out.println("马超在这里");

}

 

8. 将数组转成 set 集合;

1

2

3

String[] array2=new String[]{"黄渤","张艺兴","孙红雷","小猪","牙哥","黄磊"};

    Set<String> set=new HashSet<String>(Arrays.asList(array2));

    System.out.println(set);

 

9. 将数组转成 list 集合;

1

2

3

4

5

6

7

8

9

10

11

String[] array2=new String[]{"黄渤","张艺兴","孙红雷","小猪","牙哥","黄磊"};

//方法 1.

List<String> list=new ArrayList<String>();

for (int i = 0; i < array2.length; i++) {

    list.add(array2[i]);

}

 

String[] arrStrings2={"1","2","3"};

//方法 2.

List<String > list2=java.util.Arrays.asList(arrStrings2);

System.out.println(list2);

 

10.Arrays.fill () 填充数组;

1

2

3

4

5

6

int[] arr3=new int[5];

        Arrays.fill(arr3, 10);  //将数组全部填充10

               //遍历输出

        for (int i = 0; i < arr3.length; i++) {

            System.out.println(arr3[i]);

        }

 

11. 数组排序;

1

2

3

4

5

6

7

8

9

10

11

12

//方法 1.

int[] arr4 = {37219};

Arrays.sort(arr4);         //.sort(int[] a)   放入数组名字

for (int i = 0; i < arr4.length; i++) {

    System.out.println(arr4[i]);

}

//方法 2.        

int[] arr5 = {37219,3,45,7,8,8,3,2,65,34,5};

Arrays.sort(arr5, 14);  //.sort(a, fromIndex, toIndex)    从第几个到第几个之间的进行排序

for (int i = 0; i < arr5.length; i++) {

        System.out.println(arr5[i]);

}

 

12. 复制数组;

1

2

3

4

5

6

7

8

//方法 1.

int[] arr6 = {3721};

int[] arr7=Arrays.copyOf(arr6, 10);  //指定新数组的长度

//方法 2.        

int[] arr8=Arrays.copyOfRange(arr6, 13); //只复制从索引[1]到索引[3]之间的元素(不包括索引[3]的元素)

for (int i = 0; i < arr8.length; i++) {

        System.out.println(arr8[i]);

}

 

13. 比较两个数组;

1

2

3

int[] arr9 = {1234,5,6,7,8,9,0};

        boolean arr10=Arrays.equals(arr6, arr9);

        System.out.println(arr10);

 

14. 去重复;

1

2

3

4

5

6

7

8

9

10

11

12

13

int[] arr11 = {1234,5,6,7,8,9,0,3,2,4,5,6,7,4,32,2,1,1,4,6,3};

//利用set的特性

Set<Integer> set2=new HashSet<Integer>();

for (int i = 0; i < arr11.length; i++) {

    set2.add(arr11[i]);

}

System.out.println(set2);

int[] arr12 = new int[set2.size()];

int j=0;

for (Integer i:set2) {

    arr12[j++]=i;

}

System.out.println(Arrays.toString(arr12));

 

15. 查询数组中的最大值和最小值;

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

int[] arr11 = {10234,5,6,7,8,9,0,3,2,4,5,6,7,4,32,2,1,1,4,6,3};

 //计算最大值

int max = arr11[0];

for (int i = 1; i < arr11.length; i++) {

     if (arr11[i] > max) {

         max = arr11[i];

    }

  }

  System.out.println("Max is " + max);

  //计算最小值

  int min = arr11[0];

  for (int i = 0; i < arr11.length; i++) {

    if (arr11[i]<min) {

        min = arr11[i];

    }

}

  System.out.println("Min is " + min);

Java 中数字证书的生成及维护方法

Java 中数字证书的生成及维护方法

持续更新中。

关于JAVA对数字证书的常用操作(转载)java数字证书登录的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于codeigniter 对数据库的常用操作、HTTPS与SSL数字证书的必要性、Java 中对 Array 数组的常用操作、Java 中数字证书的生成及维护方法等相关内容,可以在本站寻找。

本文标签: