<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字節(jié)數(shù)據(jù),分開加密
       byte[] code = new byte[(((plain.length-1)/117+1))*128];  
                int ixplain = 0;
                int ixcode = 0;
                while((plain.length - ixplain) > 117) {//每117字節(jié)做一次加密
                    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字節(jié)做一次解密
                    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 小鐵匠 閱讀(3430) 評論(0)  編輯  收藏

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


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 亚洲女初尝黑人巨高清| 亚洲精品91在线| 久久福利青草精品资源站免费| 亚洲AV乱码久久精品蜜桃| 7723日本高清完整版免费| 国产亚洲精彩视频| 亚洲国产精品第一区二区| 亚洲中文无码永久免费| 一二三区免费视频| 亚洲精品视频免费在线观看| 日韩一区二区三区免费体验| AAA日本高清在线播放免费观看| 亚洲高清有码中文字| 中文字幕一精品亚洲无线一区| 男女免费观看在线爽爽爽视频| 色多多A级毛片免费看| 亚洲国产成人精品青青草原| 全黄性性激高免费视频| 91精品免费在线观看| 精品熟女少妇aⅴ免费久久| 亚洲综合一区二区三区四区五区| 亚洲日韩av无码| 四虎国产精品免费久久影院| 91青青国产在线观看免费| 久久久受www免费人成| 成人亚洲国产va天堂| 水蜜桃亚洲一二三四在线 | 和日本免费不卡在线v| 国产V片在线播放免费无码| 亚洲欧美日本韩国| 亚洲在成人网在线看| 亚洲精品乱码久久久久久久久久久久| 国外成人免费高清激情视频| 69视频免费在线观看| 精选影视免费在线 | 色妞www精品视频免费看| 亚洲 欧洲 自拍 另类 校园| 亚洲国产一区国产亚洲| 亚洲五月午夜免费在线视频 | 亚洲AV无码一区二区二三区入口| 免费人成在线观看播放国产|