当前位置:首页 > Java

java 公钥如何给

2026-03-18 21:01:12Java

生成 Java 公钥的方法

Java 中生成公钥通常涉及密钥对(公钥和私钥)的生成,随后提取公钥部分。以下是常见的实现方式:

使用 KeyPairGenerator 生成密钥对

import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PublicKey;

public class GeneratePublicKey {
    public static PublicKey generate() throws NoSuchAlgorithmException {
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        keyPairGenerator.initialize(2048); // 密钥长度
        KeyPair keyPair = keyPairGenerator.generateKeyPair();
        return keyPair.getPublic(); // 获取公钥
    }
}

从现有密钥材料加载公钥

如果已有公钥的字节数组或 Base64 编码字符串,可以通过 KeyFactory 还原:

import java.security.KeyFactory;
import java.security.NoSuchAlgorithmException;
import java.security.PublicKey;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;

public class LoadPublicKey {
    public static PublicKey fromBase64(String base64PublicKey) 
            throws NoSuchAlgorithmException, InvalidKeySpecException {
        byte[] keyBytes = Base64.getDecoder().decode(base64PublicKey);
        X509EncodedKeySpec spec = new X509EncodedKeySpec(keyBytes);
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        return keyFactory.generatePublic(spec);
    }
}

公钥的常见使用场景

加密数据

使用公钥加密敏感信息,确保只有持有对应私钥的一方可以解密:

import javax.crypto.Cipher;

public class EncryptWithPublicKey {
    public static byte[] encrypt(PublicKey publicKey, byte[] data) 
            throws Exception {
        Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        return cipher.doFinal(data);
    }
}

验证数字签名

公钥可用于验证由私钥生成的数字签名:

java 公钥如何给

import java.security.Signature;

public class VerifySignature {
    public static boolean verify(PublicKey publicKey, byte[] data, byte[] signature) 
            throws Exception {
        Signature sig = Signature.getInstance("SHA256withRSA");
        sig.initVerify(publicKey);
        sig.update(data);
        return sig.verify(signature);
    }
}

注意事项

  • 密钥长度建议至少为 2048 位以保证安全性。
  • 存储公钥时通常使用 X.509 格式(通过 getEncoded() 方法获取字节数组)。
  • 实际应用中需处理 NoSuchAlgorithmExceptionInvalidKeySpecException 等异常。
  • 考虑使用 Bouncy Castle 等安全提供者支持更多算法。

标签: 公钥java
分享给朋友:

相关文章

java如何配置环境变量

java如何配置环境变量

配置Java环境变量的方法 下载并安装JDK 从Oracle官网或OpenJDK下载适合操作系统的JDK安装包。运行安装程序并按照提示完成安装,记下JDK的安装路径(例如C:\Program File…

java如何导包

java如何导包

导入包的方法 在Java中,导入包(package)可以通过import语句实现,用于引入其他类或包中的功能。以下是几种常见的导包方式: 导入单个类 import java.util.ArrayL…

如何选择java培训

如何选择java培训

评估培训机构资质 选择有正规资质的机构,查看其营业执照、办学许可证等。优先考虑具备人力资源和社会保障部或教育部认证的机构,这类机构的教学质量和课程设置通常更规范。 考察课程内容与行业需求匹配度…

如何启用java

如何启用java

启用 Java 的方法 检查 Java 是否已安装 在命令行或终端输入 java -version,如果显示版本信息,说明 Java 已安装。若未安装,需从 Oracle 官网 或 OpenJDK 下…

php 实现 java md5

php 实现 java md5

在 PHP 中实现与 Java 相同的 MD5 哈希算法,关键在于确保编码和输出格式的一致性。以下是具体实现方法和注意事项: 确保字符串编码一致 Java 的 String.getBytes() 默…

java js实现转盘抽奖

java js实现转盘抽奖

实现转盘抽奖的步骤 HTML结构 创建转盘抽奖的基本HTML结构,包括转盘区域和抽奖按钮。 <div id="wheel"> <canvas id="wheelCanv…