Компиляция и запуск примера:
keytool -genkey -keystore kkm.kst -storepass qwerty -alias kkmcert -keypass qwerty -keyalg RSA -keysize 1024 -sigalg MD5WithRSA -validity 365 -dname CN=tester
javac ru\eport\demo\*.java
java -cp . ru.eport.demo.SignString
package ru.eport.demo;
import java.io.FileInputStream;
import java.io.UnsupportedEncodingException;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.Signature;
public class SignString {
private static final String TRANSFER_ENCODING = "windows-1251";
public static void main(String [] args) {
try {
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
//Файл-хранилище ключей (keystore)
String keyStoreFile = "kkm.kst";
FileInputStream fis = new FileInputStream(keyStoreFile);
//Пароль хранилища ключей
String keyStorePassword = "qwerty";
//Загрузка ключа
keyStore.load(fis, keyStorePassword.toCharArray());
fis.close();
//Название клиенсткого сертификата
String myKeyAlias = "kkmcert";
//Пароль закрытого ключа
String myKeyPassword = "qwerty";
//Загрузка закрытого ключа
PrivateKey privateKey = (PrivateKey) keyStore.getKey(myKeyAlias, myKeyPassword.toCharArray());
if(privateKey == null) throw new Exception("Client key not found");
//Текст для подписи
String text = "This is a test data";
//Создание подписывателя
Signature signature = Signature.getInstance("MD5withRSA");
signature.initSign(privateKey);
//Данные в формате для подписи
byte [] data;
try {
//Получение байтов в нужной кодировке
data = text.getBytes(TRANSFER_ENCODING);
} catch (UnsupportedEncodingException e) {
data = text.getBytes();
}
//Создание подписи
signature.update(data);
//Получение подписанных данных
byte [] sign = signature.sign();
//Преобразование в Base64
String signString = Base64.encode(sign);
System.out.println(signString);
} catch (Exception e) {
System.err.println("Ошибка при генерации подписи");
e.printStackTrace();
}
}
}