作者:郭嘉
邮箱:allenwells@163.com
博客:http://blog.csdn.net/allenwells
github:https://github.com/AllenWell
通过定义加密服务的类型和功能,JCA可以提供各种加密算法的支持,加密服务包括对消息摘要和数字签名的支持。
整个JCA结构如下图所示:
加密服务提供者是一个包含一组实现加密服务的API包,作为J2SE复合包的一部分,JCA框架包含一个名为SUN的默认提供者实现,该实现提供了以下功能:
引擎是加密服务的抽象表示,这里的加密服务不包含具体的算法实现,加密服务通常和特定的算法相关联。它主要包含以下功能:
算法是引擎的具体实现
使用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种方法:
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(一):Java加密服务
原文地址:http://blog.csdn.net/allenwells/article/details/46504383