• 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),这时,就可以把获得的模数和质数给到前端了,我也可以用获得的模数和质数模拟前端加密处理了。

  • 相关阅读:
    Rafy 框架
    巧用拦截器:高效的扩展点设计
    Rafy 框架
    Rafy 框架
    Rafy 框架
    Rafy 框架-发布网页版用户手册
    Rafy 领域实体框架
    基金投资方法札记
    股票、基金投资方案总结
    BaaS API 设计规范
  • 原文地址:https://www.cnblogs.com/wangjinxiang/p/10680565.html
Copyright © 2020-2023  润新知