RSA密钥长度究竟多长?

我们在安全检测的时候看到有用RSA加密对称密钥的,但是代码中看到的密钥是PEM格式,这种无法直接看出密钥到底多长,是否符合安全要求,这时候就要算出真实的密钥长度,然后判断是否符合安全要求。

生成公私钥

生成私钥

我们使用openssl工具直接生成公私钥(默认生成的是2048位):

openssl genrsa -out private8.pem

file

也可以生成1024位:

openssl genrsa -out private8.pem 1024

file

生成公钥

openssl rsa -in private8.pem -pubout -out public8.pem

file

通过openssl提取模和指数

openssl rsa -in private8.pem -noout -text

file

通过java api取对应的模数跟指数

import java.security.interfaces.RSAPublicKey;  
import com.sun.org.apache.xml.internal.security.utils.Base64;  
  
public class RSA_modulus {
    
      
  
    private static String PUBKEY_TEXT = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwaSv68WTprFlvMUmRq8sF+ior4ZwNwX7H+d67dDiUTY/02jKLJDEbDy7B+ocH7fQNDwTGEsQreYkf23YAra7eVW4/TJZoR9MVezui9p4up0b6k0KbLzpVqsG1dQj+DfNRNq0TmQClvPbzVtyOISWMnWcUr5dLGEe5+FTGJqI72yXMelpPxIv01R9rP1PdDB+BlnMXx7e2/lmUFhs9nzvwLgehtqsbLN8bi4kjIL1R7fyQVXXEaWBRgBofE5CN48TYYK6NQlhRNjY3S7Dx6SE9PRWIj4XXs663PMXCVT9Wg9W1PyN544gk9TkbW5yFpLSbsQOTlcLzNW878jYG0q9zQIDAQAB";  
  
    public static void getModulesAndExponent() throws Exception {
    
      
  
        try {
    
      
            // 解密由base64编码的公钥,并构造X509EncodedKeySpec对象  
            java.security.spec.X509EncodedKeySpec bobPubKeySpec = new java.security.spec.X509EncodedKeySpec(  
                    Base64.decode(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 {
    
      
            RSA_modulus.getModulesAndExponent();  
        } catch (Exception e) {
    
      
            e.printStackTrace();  
        }  
    }  
}

file

这样两种方法分别用公钥、钥匙得到模和指数,可以看到模是一样的,指数不同,这是因为在非对称加密中,模也就是计算出来的密钥长度是一样的,但是指数分为公匙指数和私钥指数。

猜你喜欢

转载自blog.csdn.net/u010671061/article/details/132420308