Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

SMAIMEの実装について

BouncyCastleというライブラリを用いて
SMIMEの暗号化機能を実装しようとしています。

以下のようなコードでコンパイルエラーも無く、
とりあえず暗号化されたようなデータがファイルに出力されました。
(見辛くて申し訳ございません)

**--------------------------------------------

    private static boolean encrypt(String outFilename,String inFilename,String KeyStoreFile,String storePass){

        try{
            Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());

            KeyStore ks = KeyStore.getInstance("JKS");
            ks.load(new FileInputStream(KeyStoreFile),storePass.toCharArray());

            Enumeration en = ks.aliases();
            String keyAlias = null;

            while(en.hasMoreElements()){
                String alias = (String) en.nextElement();
                if(ks.isKeyEntry(alias)){
                    keyAlias = alias;
                }
            }

            if(keyAlias == null){
                System.out.println("can't find a private key !");
                return false;
            }

            X509Certificate cert = (X509Certificate)ks.getCertificate(keyAlias);

            PrivateKey privateKey = (PrivateKey)ks.getKey(keyAlias, "changeit".toCharArray());

            SMIMEEnvelopedGenerator gen = new SMIMEEnvelopedGenerator();

            gen.addRecipientInfoGenerator(new JceKeyTransRecipientInfoGenerator(cert).setProvider("BC"));
            

            MimeBodyPart msg = new MimeBodyPart();
            if(inFilename == ""){
                msg.setText("test message");
            }else{
                msg.setDataHandler(new DataHandler(new FileDataSource(new File(inFilename))));
                msg.setHeader("Content-Type", "application/octet-stream");
                msg.setHeader("Content-Transfer-Encoding", "binary");
            }

            MimeBodyPart mp = gen.generate(msg, new JceCMSContentEncryptorBuilder(CMSAlgorithm.DES_EDE3_CBC,128).setProvider("BC").build());
            
            Properties props = System.getProperties();
            Session session = Session.getDefaultInstance(props,null);

            body.setContent(mp.getContent(), mp.getContentType());
            body.saveChanges();

            body.writeTo(new FileOutputStream(new File(outFilename)));
        }catch(Exception e){
            System.out.println(e);
            return false;
    }

        return true;
    }

**--------------------------------------------

暗号化のアルゴリズムに『CMSAlgorithm.DES_EDE3_CBC』を指定しているので、
トリプルDESで暗号化されていると思っています。
しかし、トリプルDESの 2-KEY 、3-KEYのどちらで暗号化されているのかわかりません。
(もしくはDESになっている可能性もあります)


暗号化に使用する鍵の数を指定する方法、 
上記のコーディングでは何で暗号化されるのかをご教授いただきたいと思います。


BouncyCastleの本家サイトで調べてみましたが、
思うような物が見つからず困っています。

よろしくお願いいたします。


実行環境は以下のとおりです。

jdk 1.5
bcmail 1.46

0

回答

11034

閲覧

0件の回答

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。