24.12.2014 Views

Download - Svetlin Nakov

Download - Svetlin Nakov

Download - Svetlin Nakov

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

се подава съобщението, което трябва да се подпише, и sign(), който<br />

подписва съобщението и връща изчислената сигнатура.<br />

Ето примерен код за подписване на дадено съобщение с даден личен ключ:<br />

public static byte[] signDocument(byte[] aDocument, PrivateKey aPrivateKey)<br />

throws GeneralSecurityException {<br />

Signature signatureAlgorithm = Signature.getInstance("SHA1withRSA");<br />

signatureAlgorithm.initSign(aPrivateKey);<br />

signatureAlgorithm.update(aDocument);<br />

byte[] signature = signatureAlgorithm.sign();<br />

return signature;<br />

}<br />

Верификация на цифров подпис с Java<br />

За верификация на цифров подпис се използва отново класът Signature.<br />

Използват се методите му initVerify(), на който се подава публичния<br />

ключ, който да бъде използван, update(), на който се подава подписаното<br />

съобщение, и verify(), на който се подава сигнатурата, която ще се<br />

проверява. В резултат verify() връща булева стойност – дали верификацията<br />

на сигнатурата е успешна.<br />

Ето примерен код за верификация на сигнатурата на даден документ по<br />

даден публичен ключ:<br />

public static boolean verifyDocumentSignature(byte[] aDocument,<br />

PublicKey aPublicKey, byte[] aSignature)<br />

throws GeneralSecurityException {<br />

Signature signatureAlgorithm = Signature.getInstance("SHA1withRSA");<br />

signatureAlgorithm.initVerify(aPublicKey);<br />

signatureAlgorithm.update(aDocument);<br />

boolean valid = signatureAlgorithm.verify(aSignature);<br />

return valid;<br />

}<br />

java.security.cert.CertificateFactory<br />

Класът java.security.cert.CertificateFactory предоставя функционалност<br />

за зареждане на сертификати, сертификационни вериги и CRL списъци<br />

от поток.<br />

Зареждане на сертификат от поток<br />

За прочитане на сертификат от поток или файл се използва методът<br />

CertificateFactory.generateCertificate(). Сертификатът трябва да е<br />

DER-кодиран (съгласно стандарта PKCS#7) и може да бъде представен или в<br />

бинарен или в текстов вид (с кодиране Base64).<br />

Ето примерен код за прочитане на сертификат от стандартен .CER файл:<br />

CertificateFactory certFactory = CertificateFactory.getInstance("X.509");<br />

FileInputStream stream = new FileInputStream("VeriSign-Class-1-Root-CA.cer");<br />

try {<br />

X509Certificate cert = (X509Certificate)<br />

53

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!