您的位置:首页 > 运维架构 > 网站架构

【Java安全技术探索之路系列:Java可扩展安全架构】之四:JCA(三):JCA编程模型

2015-06-15 16:11 686 查看
作者:郭嘉

邮箱:allenwells@163.com

博客:http://blog.csdn.net/allenwells

github:https://github.com/AllenWell

【Java安全技术探索之路系列:Java可扩展安全架构】章节目录

【Java安全技术探索之路系列:Java可扩展安全架构】之一:Java可扩展安全架构开篇

【Java安全技术探索之路系列:Java可扩展安全架构】之二:JCA(一):JCA架构介绍

【Java安全技术探索之路系列:Java可扩展安全架构】之三:JCA(二):JCA类和接口

【Java安全技术探索之路系列:Java可扩展安全架构】之四:JCA(三):JCA编程模型

【Java安全技术探索之路系列:Java可扩展安全架构】之五:JCE(一):JCE架构介绍

【Java安全技术探索之路系列:Java可扩展安全架构】之六:JCE(二):JCE类和接口

【Java安全技术探索之路系列:Java可扩展安全架构】之七:JCE(三):JCE编程模型

【Java安全技术探索之路系列:Java可扩展安全架构】之八:JCP(一):JCP架构介绍

【Java安全技术探索之路系列:Java可扩展安全架构】之九:JCP(二):JCP类和接口

【Java安全技术探索之路系列:Java可扩展安全架构】之十:JCP(三):JCP编程模型

【Java安全技术探索之路系列:Java可扩展安全架构】之十一:JSSE(一):JSSE架构介绍

【Java安全技术探索之路系列:Java可扩展安全架构】之十二:JSSE(二):JSSE类和接口

【Java安全技术探索之路系列:Java可扩展安全架构】之十三:JSSE(三):JSSE编程模型

【Java安全技术探索之路系列:Java可扩展安全架构】之十四:JAAS(一):JAAS架构介绍

【Java安全技术探索之路系列:Java可扩展安全架构】之十五:JAAS(二):JAAS类和接口

【Java安全技术探索之路系列:Java可扩展安全架构】之十六:JAAS(三):JAAS编程模型

【Java安全技术探索之路系列:Java可扩展安全架构】之十七:JGSS(一):JGSS架构介绍

【Java安全技术探索之路系列:Java可扩展安全架构】之十八:JGSS(二):JGSS类和接口

【Java安全技术探索之路系列:Java可扩展安全架构】之十九:JGSS(三):JGSS编程模型

【Java安全技术探索之路系列:Java可扩展安全架构】之二十:SASL(一):SASL架构介绍

【Java安全技术探索之路系列:Java可扩展安全架构】之二十一:SASL(二):SASL类和接口

【Java安全技术探索之路系列:Java可扩展安全架构】之二十二:SASL(三):SASL编程模型

一 消息摘要

使用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)
            {
            }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: