Rsa实现代码

举报
西魏陶渊明 发表于 2022/09/25 04:39:23 2022/09/25
【摘要】 感兴趣的同学自己观看,使用JDK自带 public static void RSA() throws Exception { //1.生成公私钥匙 //KeyPairGenerator 类用于生成公钥和私钥对。密钥对生成器是使用 getInstance 工厂方法(返回一个给定类的实例的静态方法)构造的。...

感兴趣的同学自己观看,使用JDK自带

public static void RSA() throws Exception {
        //1.生成公私钥匙
        //KeyPairGenerator 类用于生成公钥和私钥对。密钥对生成器是使用 getInstance 工厂方法(返回一个给定类的实例的静态方法)构造的。
        //特定算法的密钥对生成器可以创建能够与此算法一起使用的公钥/私钥对。它还可以将特定于算法的参数与每个生成的密钥关联。
        //initialize(int keysize) 初始化确定密钥大小的密钥对生成器,使用默认的参数集合,
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        KeyPair keyPair = keyPairGenerator.generateKeyPair();
        RSAPrivateKey rsaprivateKey = (RSAPrivateKey) keyPair.getPrivate();
        RSAPublicKey rsapublicKey = (RSAPublicKey) keyPair.getPublic();
        System.out.println("私钥匙:" + Base64Utils.encodeToString(rsaprivateKey.getEncoded()));
        System.out.println("公钥:" + Base64Utils.encodeToString(rsapublicKey.getEncoded()));

        //2.私钥加密,
        //PKCS8EncodedKeySpec 进行编码的专用密钥的 ASN.1 编码
        PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(rsaprivateKey.getEncoded());
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
        Cipher cipher = Cipher.getInstance("RSA");
        //Cipher.ENCRYPT_MODE, 用于将 Cipher 初始化为加密模式的常量。
        cipher.init(Cipher.ENCRYPT_MODE, privateKey);
        byte[] result = cipher.doFinal(text.getBytes());
        System.out.println("私钥加密:" + Base64Utils.encodeToString(result));

        //3.公钥解密
        // X509EncodedKeySpec 进行编码的公用密钥的 ASN.1 编码
        X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(rsapublicKey.getEncoded());
        PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
        //Cipher.DECRYPT_MODE 用于将 Cipher 初始化为解密模式的常量。
        cipher.init(Cipher.DECRYPT_MODE, publicKey);
        result = cipher.doFinal(result);
        System.out.println("公钥解密:" + new String(result));


        //TODO 使用SHA256加密解密
        Signature signature = Signature.getInstance("SHA256withRSA");
        signature.initSign(privateKey);
        signature.update(text.getBytes());
        result = signature.sign();
        System.out.println("SHA256withRSA加密:" + Base64Utils.encodeToString(result));

        signature.initVerify(publicKey);
        signature.update(text.getBytes());
        boolean flag = signature.verify(result);
        System.out.println("SHA256withRSA解密:" + flag);
    }

文章来源: springlearn.blog.csdn.net,作者:西魏陶渊明,版权归原作者所有,如需转载,请联系作者。

原文链接:springlearn.blog.csdn.net/article/details/102425291

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。