Java RSA密钥从RSAPrivateKey和RSAPublicKey对象中,分别提取模和指数

这篇具有很好参考价值的文章主要介绍了Java RSA密钥从RSAPrivateKey和RSAPublicKey对象中,分别提取模和指数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概述:

在Java编程中,我们经常用到如下一段代码来生成RSA公私钥,分别拿到公私钥然后加解密计算:

KeyPairGenerator keyPairGen;
keyPairGen = KeyPairGenerator.getInstance("RSA");
keyPairGen.initialize(2048, new SecureRandom());
KeyPair keyPair = keyPairGen.generateKeyPair();
RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();
RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();

本文讲述如何从RSAPublicKey publicKey和RSAPrivateKey privateKey
分别提取出模和指数

开发运行环境:

编辑器:android studio
sdk:
compileSdkVersion 30
buildToolsVersion "30.0.3"m
inSdkVersion 24
targetSdkVersion 26
运行平台:android13

RSAPublicKey提取模和指数代码:

public String[] GetModuleEFromRsaPubCtx(RSAPublicKey publicKey)  {
        String publicKeyString = null;
        String[] outPubPartKeys = null;

        java.security.KeyFactory keyFactory = null;
        java.security.spec.X509EncodedKeySpec bobPubKeySpec = null;
        java.security.interfaces.RSAPublicKey pubKey = null;

        try {
            keyFactory = java.security.KeyFactory.getInstance("RSA");
            bobPubKeySpec = new java.security.spec.X509EncodedKeySpec(publicKey.getEncoded());
            pubKey = (java.security.interfaces.RSAPublicKey) keyFactory.generatePublic(bobPubKeySpec);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        if (pubKey == null) {
            return null;
        }
        outPubPartKeys = new String[2];

        publicKeyString = pubKey.getModulus().toString(16).toUpperCase();
        outPubPartKeys[0] = publicKeyString;

        publicKeyString = pubKey.getPublicExponent().toString(16).toUpperCase();
        outPubPartKeys[1] = publicKeyString;

        return outPubPartKeys;
    }

RSAPrivateKey提取模和指数代码:


    public String[] GetModuleEFromRsaPriCtx(RSAPrivateKey prikey)  {
        String priKeyString = null;
        String[] outPriPartKeys = null;

        java.security.KeyFactory keyFactory = null;
        java.security.spec.PKCS8EncodedKeySpec bobPriKeySpec = null;
        java.security.interfaces.RSAPrivateKey priKey = null;

        try {
            keyFactory = java.security.KeyFactory.getInstance("RSA");
            bobPriKeySpec = new java.security.spec.PKCS8EncodedKeySpec(prikey.getEncoded());
            priKey = (java.security.interfaces.RSAPrivateKey) keyFactory.generatePrivate(bobPriKeySpec);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        if (priKey == null) {
            return null;
        }
        outPriPartKeys = new String[2];

        priKeyString = priKey.getModulus().toString(16).toUpperCase();
        outPriPartKeys[0] = priKeyString;

        priKeyString = priKey.getPrivateExponent().toString(16).toUpperCase();
        outPriPartKeys[1] = priKeyString;

        return outPriPartKeys;
    }

测试代码:

void test() {
        KeyPairGenerator keyPairGenerator = null;
        String keys[] = null;
        try {
            keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException(e);
        }
        // 指定密钥长度为2048
        keyPairGenerator.initialize(2048);
        KeyPair keyPair = keyPairGenerator.generateKeyPair();

        keys = GetModuleEFromRsaPubCtx((RSAPublicKey)keyPair.getPublic());
        Log.i("123456", "pub Get Module = " + keys[0]);
        Log.i("123456", "pub Get E = " + keys[1]);

        keys = GetModuleEFromRsaPriCtx((RSAPrivateKey) keyPair.getPrivate());
        Log.i("123456", "pri Get Module = " + keys[0]);
        Log.i("123456", "pri Get E = " + keys[1]);
    }

测试结果:

Java RSA密钥从RSAPrivateKey和RSAPublicKey对象中,分别提取模和指数,java,开发语言

小结:

本文描述了提取模和指数,暂时没有做到从RSAPrivateKey获取质数P和Q,质数P和Q肯定能获取到,以后有空研究。文章来源地址https://www.toymoban.com/news/detail-723308.html

到了这里,关于Java RSA密钥从RSAPrivateKey和RSAPublicKey对象中,分别提取模和指数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android、IOS客户端RSA密钥生成

    目录 OpenSSL介绍 使用OpenSSL 生成私钥 生成公钥 生成Java和Android的私钥 创建证书请求文件 生成数字证书 生成iOS使用的公钥文件 生成iOS使用的私钥文件 关于什么是密钥、RSA加密等相关知识之前有说过,不熟悉的可以看下这个文章。 链接:公钥、私钥、对称加密、非对称加密、

    2024年02月05日
    浏览(68)
  • 公开密钥加密之RSA算法【概念+计算+代码实现】

    🌈推荐阅读:http://t.csdn.cn/nQfIY🔥 安全算法:公开密钥加密之RSA算法 公开密钥加密(又称“非对称加密”)是加密和解密使用不同密钥的一种加密方法。包括公开密钥和私有密钥(成对生成的,网上有工具网站)。 公开密钥(public key,后面简称P):加密用的密钥 私有密钥

    2023年04月17日
    浏览(70)
  • GitHub-使用 Git工具 创建密钥id_rsa.pub

    打开Git Bash 工具 输入指令【ssh-keygen】,并按下三次回车键,最终如下图所示: 打开命令行中所示的文件路径【C:UsersLuck.ssh】;如图所示出现了两个新建文件 私钥【id_rsa】和公钥【id_rsa.pub】 使用vs code 或者 记事本 打开公钥文件【id_rsa.pub】,并复制其中的所有内容;如下图

    2024年02月02日
    浏览(43)
  • springboot + vue 前后端加密传输 RSA互相加解密、加签验签、密钥对生成

    参考 由于Java非对称加解密、加验签都是采用PKCS#8格式的密钥,PKCS#1格式的密钥跑不通,这里先简单介绍一下两者的区别。 PKCS#1和PKCS#8是两个不同的数字证书标准。 PKCS#1是一个公钥加密标准,它定义了使用RSA算法进行加密和签名的格式。主要用于对数字签名、加密以及数字签

    2024年04月27日
    浏览(37)
  • 使用RSA密钥交换和密码验证进行安全的stelnet远程登录配置实验(华为ensp实现)

    配置R1与R3之间的RSA密钥交换,使得R1可以通过stelnet方式安全地访问R3。 配置R2通过使用密码登录,使得R2可以通过stelnet方式安全地访问R3。 了解了RSA密钥交换和密码验证方式在实际中的应用,加深了对这些知识点的理解。 设备:ensp下的路由器R1,R2,R3和交换机。 连接:R1的

    2024年02月04日
    浏览(43)
  • Jenkins配置远程服务器之Publish over SSH、SSH Servers、以及Linux系统生成RSA公私密钥

    场景: 1、Publish Over SSH 插件是通过SSH连接远程服务器,可以远程执行Shell命令或传输文件 2、有两种验证方式,密码方式和秘钥方式 3、前置条件:需要安装 Public over SSH 插件 一、密码验证方式 1、位置:Jenkins 》系统管理 》系统配置》Publish over SSH 2、添加 SSH Servers 远程路径

    2023年04月22日
    浏览(79)
  • 【RSA加密/解密】PKCS1_OAEP和PKCS1_v1_5两种填充方案【python RSA密钥对生成、密码加密、密文解密、pycharm安装Crypto】

    一、PKCS1_OAEP和PKCS1_v1_5是公钥加密标准中的两种填充方案。 PKCS1_OAEP(Optimal Asymmetric Encryption Padding)是一种更安全的填充方案,它提供了更好的安全性和抗攻击性。它使用随机数进行填充,并引入了哈希函数来增加安全性。 PKCS1_v1_5是较旧的填充方案,它使用固定的填充字节序

    2024年02月06日
    浏览(48)
  • RSA 2048位算法的主要参数N,E,P,Q,DP,DQ,Qinv,D分别是什么意思 哪个是通常所说的公钥与私钥 -安全行业基础篇5

    N(Modulus):模数,是两个大素数P和Q的乘积。N的长度决定了RSA算法的安全性。 E(Public Exponent):公钥指数,通常为65537(0x10001)。E用于加密数据,是公钥的一部分。 P(Prime Factor):素数P,是模数N的一个因子。 Q(Prime Factor):素数Q,是模数N的另一个因子。 DP(D mod (P

    2024年02月05日
    浏览(32)
  • 设计模式学习笔记 - 面向对象 - 2.封装、抽象、继承、多态分别用来解决哪些问题?

    封装 也叫作信息隐藏或者数据访问保护。类通过暴露有限的访问接口,授权外部仅能通过类提供的方法(或者叫作函数)来访问内部信息或数据。 下面这段代码是一个简化版的虚拟钱包的代码实现。在金融系统中,我们会给每个用户创建一个虚拟钱包,用来记录用户在我们

    2024年02月21日
    浏览(39)
  • 警告:erlang-23.3.1-1.el7.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID a14f4fca: NOKEY错误:依赖检测失败

     今天在学RabbitMQ,在安装所需的erlang的运行环境时和rabbitMQ的时候遇到了相同这样的报错: 警告:erlang-23.3.1-1.el7.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID a14f4fca: NOKEY 错误:依赖检测失败:erlang-asn1(x86-64) = 23.3.1-1.el7 被 erlang-23.3.1-1.el7.x86_64 需要。 警告:rabbitmq-server-3.11.0-1.el8.

    2024年02月13日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包