Java安全API

2022/1/26 20:04:32

本文主要是介绍Java安全API,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程