java.security 框架之签名、加密、摘要及证书

本文介绍了Java.security框架在签名、加密、摘要和证书操作中的应用,包括加密算法的分类(单向、对称、非对称)、密钥生成、MessageDigest摘要算法、Signature签名工具、Cipher加密工具、Certificate证书存储以及KeyStore的使用。通过实例展示了如何使用Java进行安全编程。
摘要由CSDN通过智能技术生成

和第三方系统对接时,需要对隐私数据进行加密,对请求报文进行签名等。加密算法分为单向加密、对称加密、非对称加密等,其对应的算法也各式各样。Java 提供了统一的框架(java.security.*)来规范安全加密。下面将一一介绍以下内容。

  • 加密算法概念及分类
  • 密钥生成
  • 摘要算法工具 - MessageDigest
  • 签名算法工具 - Signature
  • 常用加密工具类 - Cipher
  • Certificate - 证书的保存
  • KeyStore - 密钥证书的实体类
  • Https 证书加载

一、加密算法概念及分类

常用的加密算法类型有三种,如下:

  • 单向加密 单向加密又称为不可逆加密,在加密过程中不使用密钥,明文由系统加密处理成密文,密文无法解密,一般适合于验证。在验证过程中,重新输入明文,并经过同样的加密算法处理,得到相同的密文并被系统重新认证。算法有 MD5、SHA1、HMAC等。
  • 对称加密 也就是加密方和解密方利用同一个密钥对数据进行加密和解密,例如 DES、PBE 等等。
  • 非对称加密 非对称加密算法用到的密钥分为公钥和私钥,二者是非对称的。例如用公钥加密的内容需要使用私钥来解密,使用私钥加密的内容需要用公钥来解密。非对称加密算法有 DSA、RSA等。

二、密钥生成

2.1 对称密钥生成

  • KeyGenerator(javax.crypto 包下)用于生成对称密钥。
  • 支持算法:AES、ARCFOUR、DES、DESede、HmacMD5、HmacSHA1、HmacSHA224、HmacSHA256、HmacSHA384、HmacSHA512、RC2 等。

KeyGenerator 中的几个重要的方法如下。

public static final KeyGenerator getInstance(String algorithm, String provider)
public static final KeyGenerator getInstance(String algorithm)
public final void init(int keysize)
public final void init(int keysize, SecureRandom random)
public final void init(SecureRandom random)
public final void init(AlgorithmParameterSpec params, SecureRandom random)
public final SecretKey generateKey()

示例:

    public static void main(String[] args) throws Exception {
        KeyGenerator kg = KeyGenerator.getInstance("DES");
        SecureRandom random = new SecureRandom();
        random.nextBytes(new byte[128]);
        kg.init(56, random);
        SecretKey sk = kg.generateKey();
        byte[] b = sk.getEncoded();
        System.out.println(new String(Base64.encodeBase64(b)));  // XZdrC/in5uk=
    }

2.2 非对称密钥生成

  • KeyPairGenerator(java.security 包下) 用于生成非对称加密算法的密钥对 KeyPair(java.security 包下),KeyPair 会包括一个公钥和私钥。
  • 支持算法:DiffieHellman、DSA、RSA、RSASSA-PSS、EC 等。

KeyPairGenerator.java 和 KeyPair.java 类中的重要的方法如下所示。

// KeyPairGenerator.java
public static KeyPairGenerator getInstance(String algorithm)
public static KeyPairGenerator getInstance(String algorithm, String provider)
public void initialize(int keysize, SecureRandom random)
public void initialize(AlgorithmParameterSpec params, SecureRandom random)
public final KeyPair genKeyPair() 
// KeyPair.java
public PublicKey getPublic()
public PrivateKey getPrivate()

示例:

    public static void main(String[] args) throws Exception {
        KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
        SecureRandom random = new SecureRandom();
        random.nextBytes(new byte[516]);
        keyGen.initialize(516, random);
        KeyPair keyPair = keyGen.genKeyPair();
        PublicKey publicKey = keyPair.getPublic();
        PrivateKey privateKey = keyPair.ge
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值