Dado un java.security.interfaces.RSAKey, ¿cómo obtengo su tamaño?Cómo obtener el tamaño de una clave RSA en Java
Respuesta
Usted podría intentar esto:
key.getModulus().bitLength();
El tamaño de una clave RSA es el número de bits en su módulo, por lo que desea myRSAKey.getModulus().bitLength()
.
(EDIT: escribí esta respuesta antes de entender las restricciones impuestas a los enteros primos que se generan para una clave RSA. http://csrc.nist.gov/publications/fips/fips186-3/fips_186-3.pdf Creo que cualquier generador de llaves debe garantizar que el módulo esté entre 2^(n- 1) y 2^n-1. Por lo tanto, la representación mínima de dos complementos del módulo siempre tendrá exactamente el número de bits que se especificaron para la longitud de la clave en el momento de la creación de la clave. Por ejemplo, si crea una Clave de 2048 bits, luego key.getModulus(). BitLength() siempre devolverá 2048.)
¿Perdón, pero no key.getModulus().bitLength()
devuelve un valor incorrecto cuando el bit más significativo del módulo es un 0? Por ejemplo, para una clave de 2048 bits, si el bit más significativo del módulo es 0, entonces key.getModulus().bitLength()
devolverá 2047 (o menos si más bits son 0). Yo creo que el resultado deseado en tal caso sería en realidad 2048.
La documentación para BigInteger.bitLength() dice lo siguiente:
Devuelve el número de bits en la representación mínima en complemento a dos de esta BigInteger, excluyendo un signo de bit. Para BigIntegers positivos, esto es equivalente al número de bits en la representación binaria ordinaria. (? Calcula (ceil (log2 (esto < 0 -esta:. Este + 1))))
me temo que uno tiene que hacer algunas suposiciones acerca de lo que el tamaño de la clave podría ser. Vas a tener que asumir, por ejemplo, que sólo se va a ver nunca, llaves 1024 2048, o 4096 bits y luego hacer algo como:
int keySize;
int bitLength = key.getModulus().bitLength();
if (bitLength <= 512) {
throw new IllegalArgumentException(...)
}
else if (bitLength <= 1024) {
keySize = 1024;
}
else if (bitLength <= 2048) {
keySize = 2048;
}
else if (bitLength <= 4096) {
keySize = 4096;
}
else {
throw new IllegalArgumentException(...)
}
return keySize;
Este código todavía puede estar equivocado en el (muy raro) ocasión, por ejemplo, cuando los primeros 1048 bits de una clave de 2048 bits son todos 0. Sin embargo, creo que no es algo de lo que preocuparse.
Este código es incorrecto en cada ocasión. 'key.getModulus(). bitLength()' ES el valor definido por los términos "tamaño de clave" o "longitud de clave". Reemplazarlo con valores arbitrarios elegidos es completamente erróneo. –
Oleg, tienes razón, por supuesto. Agregué el EDIT para explicar mi malentendido sobre las restricciones en los factores principales que entran en la generación de claves. –
Si aún está paranoico con los generadores de claves pésimos, se puede usar el redondeo: keySize = ((bitLength + 127)/128) * 128. Mejor que adivinar. Y la posibilidad de que los 128 bits altos sean todos ceros es, bueno, del orden de 1 en 2^128. –
- 1. Intentando comprender el tamaño de la clave Java RSA
- 2. Encriptación con clave privada RSA en Java
- 3. Tamaño de clave AES en Java
- 4. Tamaño de firma RSA?
- 5. Convertir clave pública RSA a RSA DER
- 6. Abrir una clave privada RSA de Ruby
- 7. ¿Cómo convierto una clave XML RSA en un archivo PEM?
- 8. Cómo leer una clave privada RSA PEM de .NET
- 9. Uso de una clave pública de RSA para descifrar una cadena cifrada con la clave privada de RSA
- 10. Encriptación de la clave AES con la clave pública RSA
- 11. Desglose de datos de gran tamaño para el cifrado RSA
- 12. Cifrado RSA en Java
- 13. Generar clave privada RSA en C#
- 14. Cómo almacenar una clave pública en un contenedor de clave RSA a nivel de máquina
- 15. ¿Cómo obtener el tamaño de una matriz?
- 16. Cómo cargar la clave privada RSA desde el archivo
- 17. Asegurar una clave de licencia de claves RSA con
- 18. ¿Qué es una "identificación de clave" de RSA?
- 19. Puerto RSA código Java cifrado en C#
- 20. Encriptación RSA con clave pública codificada en base64 en Android
- 21. Encriptación RSA .NET Descifrado Java
- 22. RSA: ¿Cómo generar clave privada en java y usarla en C#?
- 23. Java RSA Encryption
- 24. Cifrado RSA: Java a PHP
- 25. cifrado RSA-descifrado en iPhone
- 26. ssh-rsa validación de clave pública utilizando una expresión regular
- 27. ¿Utiliza <keygen> para obtener una clave RSA para usar con javascript?
- 28. Java HashMap: ¿Cómo obtener una clave y valor por índice?
- 29. Obtener el tamaño de una matriz
- 30. cómo obtener el tamaño de td
no doble publicación: http://stackoverflow.com/questions/2921508/trying-to-understand-java-rsa-key-size – leonbloy