<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-17  評論-6  文章-1  trackbacks-0

    keytool -genkey -dname "CN=demo, OU=softDept, O=company, L=puddong,S=shanghai, C=cn" -alias demo -keyalg RSA -keysize 1024 -keystore demoKeystore -validity 3650 -storepass storePwd -keypass demoPwd
    生成保存公鑰和私鑰的密鑰倉庫,保存在demoKeystore文件中。這里storepass 和 keypass 不要有java 正則表達式中的特殊字符,否則程序里要轉義麻煩。

    keytool -export -alias demo -keystore demoKeystore -rfc -file demo.cer //從密鑰倉庫中導出保存公鑰的證書
    輸入keypass 即demoPwd 


      try{     
       //密鑰倉庫
       KeyStore ks = KeyStore.getInstance("JKS");
    //讀取密鑰倉庫
       FileInputStream ksfis = new FileInputStream("demoKeystore");
       BufferedInputStream ksbufin = new BufferedInputStream(ksfis);
       char[] storePwd = "storePwd".toCharArray();
       ks.load(ksbufin, storePwd);
       ksbufin.close();
       char[] keyPwd = "demoPwd".toCharArray();
    //從密鑰倉庫得到私鑰
       PrivateKey priK = (PrivateKey) ks.getKey("demo", keyPwd);  
    //生成cipher
       Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding",new org.bouncycastle.jce.provider.BouncyCastleProvider());
    //用私鑰初始化cipher
       cipher.init(Cipher.ENCRYPT_MODE, priK);
       byte[] plain = "This is plain text".getBytes("UTF-8");
       
       //因為用的1024位rsa算法,一次只能加密1024/8-11字節數據,分開加密
       byte[] code = new byte[(((plain.length-1)/117+1))*128];  
                int ixplain = 0;
                int ixcode = 0;
                while((plain.length - ixplain) > 117) {//每117字節做一次加密
                    ixcode += cipher.doFinal(plain, ixplain, 117, code, ixcode);
                    ixplain += 117;
                }
                cipher.doFinal(plain, ixplain, plain.length - ixplain, code, ixcode);
                //加密后的code
                System.out.println(Arrays.toString(code));
                //通常會用base64編碼
               String base64 = encoder.encode(code);

       CertificateFactory certificatefactory = CertificateFactory
         .getInstance("X.509");
       //讀取證書
       FileInputStream fin = new FileInputStream("demo.cer");
       X509Certificate certificate = (X509Certificate) certificatefactory
         .generateCertificate(fin);
       fin.close();
       //得到公鑰
       PublicKey pubK = certificate.getPublicKey();
             //初始化cipher
                cipher.init(Cipher.DECRYPT_MODE, pubK);
          //base64解碼
                code = decoder.decodeBuffer(base64);
                System.out.println(Arrays.toString(code));
                byte[] plain2 = new byte[code.length];
                int ixplain2 = 0;
                int ixcode2 = 0;
                while((code.length - ixcode2) > 128) {//每128字節做一次解密
                    ixplain2 += cipher.doFinal(code, ixcode2, 128, plain2, ixplain2);
                    ixcode2 += 128;
                }
                ixplain2 += cipher.doFinal(code, ixcode2, code.length - ixcode2, plain2, ixplain2);
                String s2 = new String(plain2, 0, ixplain2, "UTF-8");
                System.out.println(s2);
       
      }catch(Exception ex){
       ex.printStackTrace();
      }

    keytool使用方法可以參考jdk文檔
    Java keytool工具的作用及使用方法

    posted on 2006-03-02 14:32 小鐵匠 閱讀(3431) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 最近免费中文字幕大全视频| 免费在线视频你懂的| 国产精品国产免费无码专区不卡| 亚洲欧洲中文日产| 免费A级毛片无码视频| 久久久久久亚洲Av无码精品专口 | 亚洲一区免费观看| 亚洲情a成黄在线观看动漫尤物| 国产麻豆一精品一AV一免费| 久久亚洲精品成人777大小说| 久久永久免费人妻精品下载| 亚洲综合综合在线| 野花高清在线电影观看免费视频| 亚洲人成自拍网站在线观看| 国产一区在线观看免费| 无遮挡免费一区二区三区| 国产亚洲精品看片在线观看| 国产自国产自愉自愉免费24区| 久久久久久亚洲精品中文字幕| 2021在线永久免费视频| 最新国产成人亚洲精品影院| 国产又黄又爽又刺激的免费网址| 乱爱性全过程免费视频| 亚洲AV无码一区二区三区系列 | 农村寡妇一级毛片免费看视频| 国产成人亚洲精品影院| 午夜精品一区二区三区免费视频| 亚洲一级片在线播放| 国产午夜无码视频免费网站| a级毛片高清免费视频| 亚洲欧洲日产专区| 亚洲阿v天堂在线2017免费| 免费黄网站在线观看| 亚洲色无码专区一区| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 一个人晚上在线观看的免费视频| 色噜噜综合亚洲av中文无码| 午夜免费福利影院| 国产无遮挡无码视频免费软件 | 亚洲a视频在线观看| 亚洲人成网站18禁止一区|