標籤:數位簽章 架構 金鑰組
郭嘉
郵箱:[email protected]
部落格:http://blog.csdn.net/allenwells
github:https://github.com/AllenWell
一 訊息摘要
使用MD5計算訊息摘要
try { MessageDigest md5 = MessageDigest.getInstance("MD5"); byte[] testdata = { 1, 2, 3, 4, 5 }; md5.update(testdata); byte[] myhash = md5.digest(); } catch (NoSuchAlgorithmException e) { }
使用SHA-1計算訊息摘要
try { MessageDigest sha = MessageDigest.getInstance("SHA-1"); byte[] testdata = { 1, 2, 3, 4, 5 }; sha.update(testdata); byte[] myhash = sha.digest(); } catch (NoSuchAlgorithmException e) { }
二 金鑰組的產生
密鑰用介面java.security.Key表示,該介面提供了3種方法:
- getAlgorithm()返回密鑰演算法;
- getEncoded()返回以位元組數組形式返回原始編碼格式的密鑰;
- getFormat()返回密鑰的編碼格式。
DSA演算法和DH演算法產生公私密金鑰對
try { // 1024一bit Digital Signature Algorithm(DSA) key pairs KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DSA"); keyGen.initialize(1024); KeyPair keypair = keyGen.genKeyPair(); PrivateKey privateKey = keypair.getPrivate(); PublicKey publicKey = keypair.getPublic(); // 576-bit DiffieHellman key pair keyGen = KeyPairGenerator.getInstance("DH"); keyGen.initialize(576); keypair = keyGen.genKeyPair(); privateKey = keypair.getPrivate(); publicKey = keypair.getPublic(); } catch (java.security.NoSuchAlgorithmException e) { }
三 數位簽章的產生
數位簽章技術是使用公開金鑰加密技術產生的,發送方用私密金鑰對訊息簽名,而接收方用公開金鑰對訊息進行解密,從而接收方能驗證訊息的來源或簽名者,從而確保訊息的完整性和真實性。
私密金鑰簽名
try { byte[] testdata = { 1, 2, 3, 4, 5 }; Signature dsig = Signature.getInstance(privateKey .getAlgorithm()); dsig.initSign(privateKey); dsig.update(testdata); byte[] signedData = dsig.sign(); } catch (SignatureException e) { } catch (InvalidKeyException e) { } catch (NoSuchAlgorithmException e) { }
公開金鑰驗證
try { Signature publicDsig = Signature.getInstance(publicKey.getAlgorithm()); publicDsig.initVerify(publicKey); publicDsig.update(signedData); boolean result = publicDsig.verify(signatureToVerify); } catch(SignatureException e) { } catch (InvalidKeyException e) { } catch (NoSuchAlgorithmException e) { }
【Java安全技術探索之路系列:Java可擴充安全架構】之四:JCA(三):JCA編程模型