ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java安全API

2022-01-26 19:33:06  阅读:188  来源: 互联网

标签:Java 安全 API 密钥 java security 非对称


Java安全API

LD is tigger forever,CG are not brothers forever, throw the pot and shine forever.
Modesty is not false, solid is not naive, treacherous but not deceitful, stay with good people, and stay away from poor people.
talk is cheap, show others the code,Keep progress,make a better result.
Survive during the day and develop at night。

目录

概述

java提供了完整的密码学API,我们可以结合密码学相关的概念来系统的学习这些API。
4.数据签名(signature)
要验证数据的完整性,只有信息摘要还是不够的。因为如果攻击者猜测到生成的信息摘要使用的是哪种hash算法(毕竟hash算法其实就MD5,SHA-1那几种),那么攻击者可以篡改信息后,重新生成信息摘要,所以还需要对信息摘要进行加密。数据签名其实可以理解为信息摘要和非对称加密的结合体。

5.Java安全体系
Java 安全体系 API 分为四部分:JCA、JCE、JSSE 和 JAAS。
JCA:Java API 提供基本的加密框架,比如证书、数字签名、消息摘要和密钥产生器。
JCE:是 JCA 的扩展,提供各种算法的实现、密钥管理等功能,主要位于 javax.crypto 及子包中。
JSSE:是 Java 安全套接字扩展的缩写,主要提供基于 SSL 安全网络通信的 API。
JAAS:是 Java 授权与认证服务的缩写,主要用于登录认证与角色权限等管理的 API。

JCA 和 JCE 并不提供任何加密算法的实现,只是提供接口供第三方实现加密算法。第三方厂 商根据 JCE 的接口实现加密算法,并打包成 Provide(安全提供者),就可以动态地添加到 Java 之中。加载第三方的 JCE 实现,主要有两种方式:a.使用 JRE 的 java.security 文件在 JVM 启 动时添加;b.使用 Provider 管理器 java.security.Security 的静态方法在运行时添加。hotspot虚拟机默认实现了一个Provide-SunJCE,除了Java默认提供的之外,比较著名的第三方实现还有Bouncy Castle 开源类库。

6.密码学相关API
java.security.MessageDigest:产生消息摘要对象的工厂类
java.security.Key:所有密钥的抽象表示,含有算法、二进制编码、编码格式
java.security.spec.KeySpec:密钥规范(空接口),其下的实现类专用于将二进制密钥数据规 范化为密钥对象。
java.security.spec.EncodeedKeySpec:编码的密钥规范,主要是公钥和私钥规范的抽象。 公钥采用 X.509 编码,对应于 X509EncodedKeySpec 类;私钥采用 PKCS#8 编码,对应于 PKCS8EncodedKeySpec 类。
java.security.PublicKey:非对称密码公钥的抽象接口(空接口)
java.security.PrivateKey:非对称密码私钥的抽象接口(空接口)
java.security.KeyPair:非对称密钥的包装类,称为密钥对接口,里面有 getPublicKey 和 getPrivateKey 两个方法
java.security.KeyPairGenerator:随机产生非对称密钥对的工厂
java.security.KeyFactory:将二进制数据根据密钥规范还原非对称密钥的公钥或者私钥
java.security.SecureRandom:强随机数发生器,可由第三方提供随机算法
javax.crypto.KeyGenerator:随机产生对称密钥的工厂

demo:

public static void keyDemo(byte[] privateKey,byte[] publicKey,byte[] content) throws Exception{
        KeyFactory keyf = KeyFactory.getInstance("RSA");
        //私钥
        PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privateKey);
        PrivateKey prikey = keyf.generatePrivate(keySpec);

        //公钥
        X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(publicKey);
        PublicKey pubKey = keyf.generatePublic(x509EncodedKeySpec);
        //签名
        Signature signature = Signature.getInstance("MD5withRSA");
        signature.initSign(prikey);
        signature.update(content);
        byte[] sign = signature.sign();
        //校验签名
        signature.initVerify(pubKey);
        signature.verify(sign);
 }

解密加密:
javax.crypto.Cipher:JCE核心的引擎类,提供加密解密功能。
KeyPairGenerator generator = KeyPairGenerator.getInstance(“RSA”);
KeyPair pair = generator.generateKeyPair();
//私钥
PrivateKey prikey = pair.getPrivate();
//公钥
PublicKey pubKey = pair.getPublic();

    //非对称加密
    Cipher cipher = Cipher.getInstance("RSA");
    cipher.init(Cipher.PUBLIC_KEY,pubKey);
    byte[] m = cipher.doFinal(content);

    Cipher cipher1 = Cipher.getInstance("RSA");
    //非对称解密
    cipher1.init(Cipher.PRIVATE_KEY,prikey);
    cipher1.update(m);
    byte[] s = cipher1.doFinal();
    System.out.println(new String(s));

Java密码学相关的API提供了大量的工厂方法getInstance(String algorithm),根据不同的算法返回不同的实现类。这样的好处显而易见,这可以让你的代码与具体的算法无关,如果需要更换算法只需要把RSA换成其他算法,其他部分都不需要改变。甚至你还可以把String algorithm参数写到配置文件中,到时候连代码都不用改,直接改配置文件即可。

小结:

参考资料和推荐阅读

1.链接: 参考资料.

标签:Java,安全,API,密钥,java,security,非对称
来源: https://blog.csdn.net/xiamaocheng/article/details/122707404

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有