Подписание файла с аппаратным токеном - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь подписать некоторые файлы с SafeNet eToken5110.Мне удалось получить сертификат от этого, но узнал, что я не могу экспортировать PrivateKey.Я разработал некоторый код для шифрования / дешифрования файлов с общим сертификатом, и теперь моя задача - сделать то же самое с eToken.Но я не могу найти информацию, как это сделать.Какие-нибудь советы?Есть ли API для этого?(и документация / примеры)

1 Ответ

0 голосов
/ 26 ноября 2018

Хорошо, я узнал, как подписать smtx аппаратным токеном, и я надеюсь, что кто-то найдет его полезным.Нужно использовать класс Signature и провайдера SunPKCS11

public static byte[] sign(byte[] file) throws Exception {

    char password[] = "12345678".toCharArray();
    Provider userProvider = new sun.security.pkcs11.SunPKCS11("C:\\ForJava\\eToken.cfg");
    KeyStore ks = KeyStore.getInstance("PKCS11", userProvider);
    ks.load(null, password);   

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

    //Working only with the first alias on the token
    String alias = (String)ks.aliases().nextElement();

    Signature signature = Signature.getInstance("SHA256withRSA"); 
    PrivateKey privateKey = (PrivateKey) ks.getKey(alias, password);
    signature.initSign(privateKey);
    signature.update(file);

    byte[] result = signature.sign();
    //System.out.println("result coding: \n" +new BASE64Encoder().encode(result));
    return result;
}

. Для проверки подписанных данных вы можете использовать следующий код

public static void verify(byte[] sig, byte[] original) throws Exception {

    Keystore keystore = initKeystore();
    PublicKey key = keystore.getCertificate(getCertAlias()).getPublicKey();
    Signature s = Signature.getInstance("SHA256withRSA");
    s.initVerify(key);
    s.update(original);

    if ( ! s.verify(sig)) {
        System.out.println("Signature check FAILED");
        return;
    }
    System.out.println("Signature check PASSED");


}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...