Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с проблемой переписки кода с PHP на Java, подписать сертифекатом String значение 
V
    Опции темы
Fame_biz
Дата 18.4.2007, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 1.2.2007

Репутация: нет
Всего: нет



Есть проблема как такой код переписать на Java. Помогите переписать данный код.

Код

$data = "TEST-TEST-TEST-TEST"
// прочитать RSA ключ 
$fp = fopen("/opt/deploy/certs/1751852.pem", "r"); 
$priv_key = fread($fp, 8192); 
fclose($fp); 
$pkeyid = openssl_get_privatekey($priv_key); 
//  получить подпись 
openssl_sign( $data , $signature, $pkeyid); 
// free the key from memory 
openssl_free_key($pkeyid); 
// закодировать значение в BASE64 , так как $signature имеет бинарный  формат 
$b64sign = base64_encode($signature) ;
 


Это сообщение отредактировал(а) Fame_biz - 18.4.2007, 17:50
PM MAIL   Вверх
AntonSaburov
Дата 18.4.2007, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 8
Всего: 118



Эх, кабы знать PHP - наверно помог бы. Но я ничего не понял из вышеприведенного :(
PM MAIL WWW ICQ   Вверх
Fame_biz
Дата 18.4.2007, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 1.2.2007

Репутация: нет
Всего: нет



Данным PHP кодом просто шифруеться закритим ключем SSL текстовое значение а потом шифруеться через Base64.

Это сообщение отредактировал(а) Fame_biz - 18.4.2007, 17:49
PM MAIL   Вверх
Alexandr87
Дата 19.4.2007, 06:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


дыкий псых
***


Профиль
Группа: Завсегдатай
Сообщений: 1459
Регистрация: 27.11.2004
Где: Алматы, Казахстан

Репутация: 6
Всего: 39



pem файл 1?
Есть два выхода: можно, либо найти  JCE провайдер, который предоставляет такой PEM KeyStore , либо конвертнуть в формат джавовского keystore JKS. Линк по конвертации есть здесь. http://mark.foster.cc/kb/openssl-keytool.html
Либо, использовать другую библиотеку (OpenSSL врапер) http://www.warnertechnology.com/Computers/...vaOpenSSL.shtml

Это сообщение отредактировал(а) Alexandr87 - 19.4.2007, 06:23
PM Jabber   Вверх
Fame_biz
Дата 20.4.2007, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 1.2.2007

Репутация: нет
Всего: нет



Да например я сертифекат положу в KeyStore. А как потом подписать текст данным ключем ?
PM MAIL   Вверх
Alexandr87
Дата 21.4.2007, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


дыкий псых
***


Профиль
Группа: Завсегдатай
Сообщений: 1459
Регистрация: 27.11.2004
Где: Алматы, Казахстан

Репутация: 6
Всего: 39



Цитата(Fame_biz @  20.4.2007,  20:08 Найти цитируемый пост)
Да например я сертифекат положу в KeyStore. А как потом подписать текст данным ключем ? 


Думаю стоит внести ясность.
Сертификат это не ключ. Сертификат лишь подтверждает принадлежность открытого ключа определенному человеку. Таким образом сертификат таки содержит ключ, но открытый. А подпись вырабатывает с помощью закрытого (прайвит) ключа. Вывод: одного сертификата не достаточно для выработки подписи - нужен прайвит ключ, и вам придется переносить в JKS еще и закрытый ключ. В ссылке, что я давал выше, была информация по конвертации openssl ного хранилища (pem)  в JKS, вместе с сертификатами и ключами.

В итоге, когда у вас есть, хранилище, доступ к которому вы можете получить через объект KeyStore ( в моем случае это SUNовский JKS), вы можете воспользовать следующим кодом.

Код

import java.io.FileInputStream;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.Signature;
import java.security.SignatureException;
import java.security.cert.Certificate;
import java.util.Enumeration;


public class RSACryptExapmle {
    
    public final static String KEYSTORE_FILENAME = 
            "/home/alexandr/signtest/.keystore2";
    public final static String KEYSTORE_TYPE = "JKS";
    public final static String SIGNATURE_TYPE = "SHA1withRSA";
    
    
    
    
    public static void main(String args[]) throws Exception {
        
        System.out.println("Start");
        // пин к криптоконтейнеру
        char[] pin = "123456".toCharArray();
        
        // подписываемая строка
        String toSign = "example string to sign";
        byte [] data = toSign.getBytes("cp1251");
        
        
        // Загружаем криптоконтейнер из файла
        FileInputStream fis = new FileInputStream(KEYSTORE_FILENAME);
        KeyStore ks = KeyStore.getInstance(KEYSTORE_TYPE);
        ks.load(fis,pin);
        
        // Берем первую запись из кк, можно брать ту которая нужна пол алиасу
        Enumeration en = ks.aliases();
        if (!en.hasMoreElements()) {
            throw new Exception("Keystore is empty");
        }
        
        String alias = (String)en.nextElement();
        
        
        // получаем прайвит кей для выработки подписи
        PrivateKey privateKey = (PrivateKey) ks.getKey(alias, pin);

        // создаем объект для вырботки подписи
        Signature signature = Signature.getInstance(SIGNATURE_TYPE);
        signature.initSign(privateKey);
        signature.update(data);

        // получаем подпись в байтовый массив
        byte[] sign = signature.sign();

        
        // получаем сертификат
        Certificate cert = ks.getCertificate(alias);
        
        // создаем объект для верификации подписи
        Signature verifier = Signature.getInstance(SIGNATURE_TYPE);
        verifier.initVerify(cert);
        verifier.update(data);
        try {
            // если вылетел ексепшн или функция вернула false - подпись не верна                                
            if (!verifier.verify(sign)) {
                throw new SecurityException("sign isn't valid");
            }
        } catch (SignatureException e) {
            e.printStackTrace();
        }
        System.out.println("first is ok");
        
        
        // специально покаверкаем подпись
        sign[20] = ++sign[20];
        verifier.initVerify(cert);
        verifier.update(data);
        try {
            if (!verifier.verify(sign)) {
                throw new SecurityException("sign isn't valid");
            }
        } catch (SignatureException e) {
            e.printStackTrace();
        }

        System.out.println("Done");

    }
}



PM Jabber   Вверх
Fame_biz
Дата 23.4.2007, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 1.2.2007

Репутация: нет
Всего: нет



Да спасибо разобрался. Но есть также вопросик. А можно ли каким небуть способом напрямую загружать сертификат не используя предварительную загрузу эго в JKS. 
PM MAIL   Вверх
Alexandr87
Дата 23.4.2007, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


дыкий псых
***


Профиль
Группа: Завсегдатай
Сообщений: 1459
Регистрация: 27.11.2004
Где: Алматы, Казахстан

Репутация: 6
Всего: 39



Цитата(Fame_biz @  23.4.2007,  17:22 Найти цитируемый пост)
Да спасибо разобрался. Но есть также вопросик. А можно ли каким небуть способом напрямую загружать сертификат не используя предварительную загрузу эго в JKS.  

Вам нужнен сертификат или все таки прайвит ключ для подписи?
Выложите пример ваших pem файлов дабы посмотреть как у вас хранится прайвит кей. Php я знаю плохо, но вроде прайвит ключи у вас хранятся в открытом виде, так, что с написанием кода импорта ключа проблем возникнуть не должно. Завтра вечером должен быть кусок свободного времени - посмотрю.


Это сообщение отредактировал(а) Alexandr87 - 23.4.2007, 19:32
PM Jabber   Вверх
Fame_biz
Дата 24.4.2007, 01:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 1.2.2007

Репутация: нет
Всего: нет



Вот сам приватный ключ. Если можно то по порядку розяснить как его нужно будет добавить в KeyStore.

Код

-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQC620B96oZAb1Yxm9G4JrCrwXJA4kTt11vNt9CaSBmcwGL42iRb
ZjjDmUvcsmq6aPS3Mx0VezZvry/sMvshGr/CW4MuEXuSbIp3DIFhnMMU1bQVxG+0
kDIesvXdMwN5OMC0neude9dkWFWNWluxpqbbpIISVuMl0pqVTKI9ye7sKQIDAQAB
AoGAZtMASkokVpDt/Z6haZTg46MwHERnafp4qlvcjwneDkRQMmDYYPN/iSNye6Ay
2yGmiKm393o2Gn9s/62ORElT+84qpDD4XeLs8H3KSQuAwAlS/CRPSjrNDokAjzwi
nMl6qzViJjtMQn6Kdl/5HFHsJDGHDdNQl38sQdYtSYHYngECQQDyIVzTEdYRYGu7
qsK90UrjRyfWHxgbIGrXZxHdQewrGDQCzVXkHnRJalqAMvlGroXuWgQRdJcIkpDm
93Zb+o4dAkEAxY9YM/0NQWtTeU72ZZNwYK+sWIpugELtn+/X2g8PWkTc8VdTbDSG
IP+4kgrDMyk+GrRwqvrcXPjKdMdnAn8ofQJBANtePqs8TaYQpYqxex5esGqZ3Q2x
vjVVeXcOerDrOP0SQI0JW/gBX3nkUXo0tIPFOrJn+6eU6gFqSL35FdLffkECQDdd
Kny3R8WzjBsM0+Q3Y2DVGlldwgXTu7/8eOM1ITpM3hYMQOar+YK550GWHonx3uOg
+YoQ7zxmxGXhk66RcAkCQQC+KSz4TvW1RSiDQGzmKgkHyh6pFSsWI55K+fAfS+bs
Fj8Haq4FsmpdGJDNN/LPrD9nmJoN9GNFsNc2tHcIACRu
-----END RSA PRIVATE KEY-----



А вот сам сертифекат
Код

-----BEGIN CERTIFICATE-----
MIIDjTCCAvagAwIBAgIJAKmbCVHtol5yMA0GCSqGSIb3DQEBBAUAMIGMMQswCQYD
VQQGEwJVQTENMAsGA1UECBMES1lJVjENMAsGA1UEBxMES1lJVjEQMA4GA1UEChMH
TUlMVFJFWDEXMBUGA1UECxMOTWlsdHJleC5jb20udWExEDAOBgNVBAMTBzE3NTIw
NzQxIjAgBgkqhkiG9w0BCQEWE2luZm9AbWlsdHJleC5jb20udWEwHhcNMDcwNDE2
MTUxNzUyWhcNMDgwNDE1MTUxNzUyWjCBjDELMAkGA1UEBhMCVUExDTALBgNVBAgT
BEtZSVYxDTALBgNVBAcTBEtZSVYxEDAOBgNVBAoTB01JTFRSRVgxFzAVBgNVBAsT
Dk1pbHRyZXguY29tLnVhMRAwDgYDVQQDEwcxNzUyMDc0MSIwIAYJKoZIhvcNAQkB
FhNpbmZvQG1pbHRyZXguY29tLnVhMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
gQC620B96oZAb1Yxm9G4JrCrwXJA4kTt11vNt9CaSBmcwGL42iRbZjjDmUvcsmq6
aPS3Mx0VezZvry/sMvshGr/CW4MuEXuSbIp3DIFhnMMU1bQVxG+0kDIesvXdMwN5
OMC0neude9dkWFWNWluxpqbbpIISVuMl0pqVTKI9ye7sKQIDAQABo4H0MIHxMB0G
A1UdDgQWBBS12Bl16rEQ+S4umNv5RJqpnXpt5jCBwQYDVR0jBIG5MIG2gBS12Bl1
6rEQ+S4umNv5RJqpnXpt5qGBkqSBjzCBjDELMAkGA1UEBhMCVUExDTALBgNVBAgT
BEtZSVYxDTALBgNVBAcTBEtZSVYxEDAOBgNVBAoTB01JTFRSRVgxFzAVBgNVBAsT
Dk1pbHRyZXguY29tLnVhMRAwDgYDVQQDEwcxNzUyMDc0MSIwIAYJKoZIhvcNAQkB
FhNpbmZvQG1pbHRyZXguY29tLnVhggkAqZsJUe2iXnIwDAYDVR0TBAUwAwEB/zAN
BgkqhkiG9w0BAQQFAAOBgQBo/1EEqJ4txKYmUJm7xqOv27irNYRJ0f6Lx7P/pLgk
s1nHjmQao0poRaKK+aG1xVXtLf8J3y2bkVQexmsU31X+F/jkdrzZYOJd/8vFAivb
1bV/y9cByHCfdIs+Q+NjwCqvRGbdDOV4bNPND6/6BYnBETbZ4oj3ehxf2NR1ECg/
iQ==
-----END CERTIFICATE-----


Пробивал так 
Код

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.*;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.security.cert.CertificateException;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.*;

/**
 * Created by IntelliJ IDEA.
 * User: Igor.Yova
 * Date: 21/4/2007
 * Time: 16:46:36
 */
public class UPCToken {

    private PrivateKey getPrivateKey(String keyfile) throws KeyStoreException, IOException, NoSuchAlgorithmException, InvalidKeySpecException {
        FileInputStream infile = new FileInputStream(keyfile);
        int infilelength = infile.available();
        byte[] key = new byte[infilelength];
        infile.read(key);
        infile.close();
        PKCS8EncodedKeySpec privKeySpec = new PKCS8EncodedKeySpec(key);
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        RSAPrivateKey privKey = (RSAPrivateKey) keyFactory.generatePrivate(privKeySpec);
        return privKey;
    }

    private PublicKey getPublicKey(String keyfile) throws KeyStoreException, IOException, NoSuchAlgorithmException, InvalidKeySpecException, NoSuchProviderException, CertificateException {
        InputStream inStream = new FileInputStream(keyfile);
        CertificateFactory cf = CertificateFactory.getInstance("X.509");
        X509Certificate cert = (X509Certificate) cf.generateCertificate(inStream);
        inStream.close();
        return (RSAPublicKey) cert.getPublicKey();
    }

    private byte[] sign(String data, PrivateKey prvKey, String sigAlg) throws Exception {
        Signature sig = Signature.getInstance(sigAlg);
        sig.initSign(prvKey);
        sig.update(data.getBytes());
        return sig.sign();
    }

    private boolean verify(byte[] data, PublicKey pbKey, String sigAlg) throws Exception {
        Signature sig = Signature.getInstance(sigAlg);
        sig.initVerify(pbKey);
        return sig.verify(data);
    }

    public static void main(String[] args) {
        UPCToken sdf = new UPCToken();
        try {
            PrivateKey xfg = sdf.getPrivateKey("d://1752074.pem");
            PublicKey sfg = sdf.getPublicKey("d://1752074.crt");
            byte[] adf = sdf.sign("TEST", xfg, "SHA1withRSA");
            boolean sfd = sdf.verify(adf, sfg, "SHA1withRSA");
            System.out.println(adf);
            System.out.println(sfd);
        } catch (KeyStoreException e) {
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InvalidKeySpecException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


Это сообщение отредактировал(а) Fame_biz - 24.4.2007, 01:42
PM MAIL   Вверх
Alexandr87
Дата 24.4.2007, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


дыкий псых
***


Профиль
Группа: Завсегдатай
Сообщений: 1459
Регистрация: 27.11.2004
Где: Алматы, Казахстан

Репутация: 6
Всего: 39



Всеж стоило файлик с прайвит кеем выложить полностью, чтоб я мог проверить. (все равно использовать его дальше я вам очень не рекомендую)

Ваш код рассчитан на то, что информация в файлах закодирована в der формате, в то время, как у вас PEM файлы. Для того, чтобы перевести из PEM в DER, нужно убрать "рамки", и декодировать из BASE64.

Вот примерно, как это должно выглядеть
Код

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.security.KeyFactory;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.security.interfaces.RSAPrivateKey;
import java.security.spec.PKCS8EncodedKeySpec;
import org.apache.commons.codec.binary.Base64;

public class ImportPEM {
    
    public static X509Certificate importCertificate(String fileName)
    throws Exception {
        
        // Считываем файл в строку, для дальнейшего парсинга
        StringBuffer bstring = new StringBuffer(1024);
        char buffer[] = new char[1024];
        int res;
        
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                new FileInputStream(fileName)));
        
        while ((res = reader.read(buffer))!=-1) {
            bstring.append(buffer, 0, res);
        }
        
        reader.close();
        
        String pemContent = bstring.toString();
        
        // парсим сертификат
        int idxStart = pemContent.indexOf("-----BEGIN CERTIFICATE-----")+27;
        int idxEnd = pemContent.indexOf("-----END CERTIFICATE-----", idxStart);
        
        byte pemCertificate[] =
                pemContent.substring(idxStart, idxEnd).getBytes();
        
        // декодируем из pem
        Base64 b64 = new Base64();
        byte derCertificate[] = b64.decodeBase64(pemCertificate);
        
        // получаем сертификат
        ByteArrayInputStream bais = new ByteArrayInputStream(derCertificate);
        
        CertificateFactory cf = CertificateFactory.getInstance("X.509");
        X509Certificate cert = (X509Certificate)cf.generateCertificate(bais);
        
        System.out.println(cert.toString());
        
        return cert;
    }
    
    public static RSAPrivateKey importRSAPrivateKey(String fileName)
    throws Exception {
        // Считываем файл в строку, для дальнейшего парсинга
        StringBuffer bstring = new StringBuffer(1024);
        char buffer[] = new char[1024];
        int res;
        
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                new FileInputStream(fileName)));
        
        while ((res = reader.read(buffer))!=-1) {
            bstring.append(buffer, 0, res);
        }
        
        reader.close();
        
        String pemContent = bstring.toString();
        
        // парсим сертификат
        int idxStart =
                pemContent.indexOf("-----BEGIN RSA PRIVATE KEY-----") + 31;
        int idxEnd =
                pemContent.indexOf("-----END RSA PRIVATE KEY-----", idxStart);
        
        byte pemRSAPrivateKey[] =
                pemContent.substring(idxStart, idxEnd).getBytes();
        
        // декодируем из pem
        Base64 b64 = new Base64();
        
        byte derRSAPrivateKey[] = b64.decodeBase64(pemRSAPrivateKey);
        
        
        PKCS8EncodedKeySpec privKeySpec =
                new PKCS8EncodedKeySpec(derRSAPrivateKey);
        
        KeyFactory kf = KeyFactory.getInstance("RSA");
        RSAPrivateKey privKey = (RSAPrivateKey)kf.generatePrivate(privKeySpec);
        
        System.out.println(privKey.toString());
        
        return privKey;
    }
    
    public static void main(String args[]) throws Exception {
        
        System.out.println("Start");
        
        importCertificate("/home/alexandr/signtest/cert.pem");
        importRSAPrivateKey("/home/alexandr/signtest/privkey8.pem");
        
        System.out.println("Done.");
        
    }
}



ЗЫ: для использования ключа, его не обязательно помещать в KeyStore. KeyStore - это всего лишь хранилище ключей, сертификатов.

Это сообщение отредактировал(а) Alexandr87 - 24.4.2007, 16:30
PM Jabber   Вверх
Fame_biz
Дата 25.4.2007, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 1.2.2007

Репутация: нет
Всего: нет



Именно с public все нормально проходит а вот только с privat проблемы.
Попробывал воспользоваться твоим примером получил такую щтуку на методе importRSAPrivateKey

Код

java.security.spec.InvalidKeySpecException: Unknown key spec.
    at com.sun.net.ssl.internal.ssl.JS_KeyFactory.engineGeneratePrivate(DashoA12275)
    at com.sun.net.ssl.internal.ssl.JSA_RSAKeyFactory.engineGeneratePrivate(DashoA12275)
    at java.security.KeyFactory.generatePrivate(KeyFactory.java:237)
    at ua.com.miltrex.payment.upc.ImportPEM.importRSAPrivateKey(ImportPEM.java:103)
    at ua.com.miltrex.payment.upc.ImportPEM.main(ImportPEM.java:115)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:324)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:90)
Exception in thread "main" 


Сам ключ получил так 
openssl genrsa -out   PRIVAT.pem 1024 
а потом команда для получения паблик ключа
openssl req -new -key PRIVAT.pem -x509 -days 365 -out PUBLIC.crt


Это сообщение отредактировал(а) Fame_biz - 25.4.2007, 12:24
PM MAIL   Вверх
Alexandr87
Дата 26.4.2007, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


дыкий псых
***


Профиль
Группа: Завсегдатай
Сообщений: 1459
Регистрация: 27.11.2004
Где: Алматы, Казахстан

Репутация: 6
Всего: 39



Fame_biz,  значит не pkcs8 формат, поэтому я и говорил, что лучше было выложить весь ключ, или сказать, как генерировали.

Буду смотреть, самому интересно.
PM Jabber   Вверх
Alexandr87
Дата 26.4.2007, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


дыкий псых
***


Профиль
Группа: Завсегдатай
Сообщений: 1459
Регистрация: 27.11.2004
Где: Алматы, Казахстан

Репутация: 6
Всего: 39



Вот тут есть большая крипто бибилиотека http://www.bouncycastle.org/, скачивал ее не так давно, но так и не посмотрел. Вот терь взглянул.
Есть класс для чтения объектов из openssl pem файла.

Пользовать так:
Код

package pemexporter;

import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.security.KeyPair;
import java.security.Security;
import java.security.interfaces.RSAPrivateKey;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.openssl.PEMReader;

/**
 *
 * @author alexandr
 */
public class Main {
    
    /** Creates a new instance of Main */
    public Main() {
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) 
    throws Exception {
        
        Security.addProvider(new BouncyCastleProvider());
        
        Reader reader = new InputStreamReader(
                new FileInputStream("/home/alexandr/signtest/privkey.pem"));
        PEMReader preader = new PEMReader(reader);
        Object opensslObj = preader.readObject();
        
        if (opensslObj instanceof KeyPair) {
            KeyPair kp = (KeyPair)opensslObj;
            
            RSAPrivateKey rsaPrivKey = (RSAPrivateKey) kp.getPrivate();
            
            System.out.println(rsaPrivKey.toString());
        } else {
            System.out.println("error");
        }
        
        preader.close();
        
    }
}


А дальше, как в примерах выше.

Надо будет всетаки посмотреть этот формат. Предпологал, что openssl должен использовать pkcs8, как общепринятый стандарт для хранения private ключей. 

PS А библиотека на самом деле хорошая, нашел, когда срочно нужна была реализация ГОСТ подписи.

Это сообщение отредактировал(а) Alexandr87 - 26.4.2007, 20:44
PM Jabber   Вверх
Fame_biz
Дата 28.4.2007, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 1.2.2007

Репутация: нет
Всего: нет



Большое спасибо за помощ Alexandr87.

Это сообщение отредактировал(а) Fame_biz - 28.4.2007, 14:44
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0869 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.