Компиляция и запуск примера:
keytool -import -keystore kkm.kst -storepass qwerty -file eport.cer -alias eport -noprompt
javac ru\eport\demo\*.java
java -cp . ru.eport.demo.CheckSign
package ru.eport.demo;
import java.io.FileInputStream;
import java.io.UnsupportedEncodingException;
import java.security.KeyStore;
import java.security.PublicKey;
import java.security.Signature;
import java.security.cert.Certificate;
public class CheckSign {
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();
//Название сертификата e-port
String eportAlias = "eport";
//Загрузка сертификата e-port
Certificate cert = keyStore.getCertificate(eportAlias);
if(cert == null) throw new Exception("Server certificate not found");
//Получение публичного ключа
PublicKey publicKey = cert.getPublicKey();
String text = "test"; //подписанные данные
//Данные в формате для подписи
byte [] data;
try {
//Получение байтов в нужной кодировке
data = text.getBytes(TRANSFER_ENCODING);
} catch (UnsupportedEncodingException e) {
data = text.getBytes();
}
//Подпись в формате base64
String subscriptText = "brmgSFt7jcL4qOoVdg49S9DkgZt9VwP2mnaBgBX/IPiezQfbGBPVesMYH099+jJrq3BNCb4mUciLK8Vx/UDUfl06u6"+
"gc5eBdtorns3EApG9JtbiEaxZvhtXfI7OzjpjctcAKo8J9jIriQZEbAachy2wy2BBNCYlWalHPkWhdFKM=";
//Разбор формата Base64
byte [] subscript = Base64.decode(subscriptText);
try {
//инициализация подписи
Signature signature = Signature.getInstance("MD5withRSA");
signature.initVerify(publicKey);
//создание подписис с данными
signature.update(data);
//проверка подписи
System.out.println(signature.verify(subscript) ? "Подписано верно": "Подписано не верно");
} catch (Exception e) {
System.out.println("Подписано неверно");
}
} catch (Exception e) {
System.err.println("Ошибка при проверке подписи");
e.printStackTrace();
}
}
}