zoukankan      html  css  js  c++  java
  • RSA公私钥获取模数和质数

      实际项目中,发现前端在生成公钥对象的时候并不是使用这种方式,而是通过对应的模数跟质数来构造公钥对象的,这样的话,需要进一步将生成的公钥取出对应的模数和质数。openssl、java api都可以将质数跟模数取出来。

    正常生成公私钥如下:

    1.通过openssl工具取出模数和质数

      命令行使用 openssl rsa -in priKey.pem -noout -text,得到下图中的modules以及publicExponent

      这里我们都取十六进制的。这样对应的模数(前面的00去掉即可)跟质数就出来了。
    2.通过java api取对应的模数跟质数

    package com.wangjinxiang.genkey.util;
    
    import java.security.interfaces.RSAPublicKey;
    import org.apache.commons.codec.binary.Base64;
    
    public class KeyModulesAndExponentUtil {
    
      private static String PUBKEY_TEXT = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxdHDlJrjF+anpWRbiLuN2Hu9oPaABcVKAJSCq3UEreIn33ldx645l+9RDat6THqJEeTjRt9orogXwpAeFkDqje0YFjTu4v3eyLnkGjg3oDozYCoY9c7vfQ/BMw3X+2Wy0lYpRg23qis0lWB/ZdoVnj6SP0fcXBiqJSk+/deZNVreUvozl0X1o17EyJsKGJd2Uk0ltC3DfRve0TK1TJp4pssEDLRqFPAVJSJjFEe2lr6IUKDlv9ArPRZXh67zxxe1t/qW+tJSJjhaQKFLwpYVmpNnPNuYJ7gLqLPxDiqosFVJK0q3On2IFbviaXMhwGv85GD2Exlmn9KDW4p1box6QQIDAQAB";
      
      public static void getModulesAndExponent() throws Exception {
        
        try {
          // 解密由base64编码的公钥,并构造X509EncodedKeySpec对象
          java.security.spec.X509EncodedKeySpec bobPubKeySpec = new java.security.spec.X509EncodedKeySpec(
                  Base64.decodeBase64(PUBKEY_TEXT));
          // RSA算法
          java.security.KeyFactory keyFactory = java.security.KeyFactory.getInstance("RSA");
          // 取公钥匙对象
          RSAPublicKey pubKey = (RSAPublicKey) keyFactory.generatePublic(bobPubKeySpec);
          
          System.out.println("modules: 0x" + pubKey.getModulus().toString(16));
          System.out.println("publicExponent: 0x" + pubKey.getPublicExponent().toString(16));
        }catch(Exception e) {
          throw e;
        }
      }
      
      public static void main(String[] args) {
        try {
          KeyModulesAndExponentUtil.getModulesAndExponent();
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    }

      打印出来的结构跟使用openssl工具是一样的。

      至此,这两种方法都可以正确取出模数(modules)和质数(publicExponent),这时,就可以把获得的模数和质数给到前端了,我也可以用获得的模数和质数模拟前端加密处理了。

  • 相关阅读:
    模拟死锁
    B站学习斯坦福大学Swift 语言教程 iOS11 开发【第一集】踩到的几个坑(XCode 13.2.1版本)
    数学之美番外篇:平凡而又神奇的贝叶斯方法
    joj 1753: Street Numbers
    二叉树的三种遍历(递归+非递归)
    joj 1905: Freckles
    joj 2630: A Pair of Graphs(同构图的判定)
    vue3.x 中获取dom元素
    defineProperty 和 Proxy 的区别
    vue 按钮的防抖和节流
  • 原文地址:https://www.cnblogs.com/wangjinxiang/p/10680565.html
Copyright © 2011-2022 走看看