Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Cómo se implementa RSA PKCS#1 en Java?

¿Cómo se implementa RSA PKCS#1 en Java?

Compruebe si el siguiente código es lo que necesita. Esta es la colección que utilicé originalmente

import javax.crypto.Cipher

import java.security.*; >

importar java.security.spec.

importar java.security.spec.RSAPublicKeySpec

importar java.security.spec.RSAPrivateKeySpec

importar java.security.spec.InvalidKeySpecException

importar java.security.interfaces.RSAPrivateKey

importar java.security.interfaces.RSAPublicKey

importar java; .io.*;

import java.math.BigInteger;

/**

* Clase de utilidad RSA. Proporciona métodos para cifrar, descifrar y generar pares de claves.

* Debes visitar http://www.bouncycastle.org para descargar bcprov-jdk14-123.jar.

* Descripción general de los principios de cifrado RSA

* La seguridad RSA se basa en una descomposición de números grandes, donde las claves pública y privada son funciones de dos números primos grandes (números decimales mayores que 100).

* Algunas personas especulan que la dificultad de inferir texto plano a partir de la clave y el texto cifrado es equivalente a factorizar el producto de dos números primos grandes

* ========= === ================================================= === =====

* (La seguridad de este algoritmo no ha sido probada teóricamente)

* ============== ==================================================== ===

* Generación de claves:

* 1. Seleccione dos números primos grandes p, q y calcule n=p*q

* 2. .Seleccione aleatoriamente la clave de cifrado e y requiera que e y (p-1)*(q-1) sean números primos entre sí

* 3. Utilice el algoritmo euclidiano para calcular la clave de descifrado d. que Satisfacer e*d = 1 (mod(p-1)*(q-1)) (donde n y d también deben ser primos relativos)

* 4: De esta manera, la clave pública ( n,e ) y clave privada (n, d)

* * 4: Clave pública (n, e) y clave privada (n, d)

* * 4: Pública La clave (n,e) es la misma que la clave privada (n,d).

)

* ========================================== ==========================

* Métodos de cifrado y descifrado:

* 1. Primero , divida la información cifrada m (binaria) en bloques iguales m1, m2... ...,...,...mi longitud de bloque s (lo más grande posible), donde 2^s

* 2: La fórmula de cálculo correspondiente al texto cifrado es: ci = mi^e(mod n)

* 3: La fórmula de cálculo de descifrado es: mi = ci^d(mod n)

* ====================================== ====== == ======================

* Velocidad RSA

* Debido a la gran cantidad de cálculos requeridos , software y hardware, RSA es 100 veces más lento que DES en el caso más rápido.

*La velocidad siempre ha sido un inconveniente de RSA. Por lo general, sólo se utiliza para cifrar pequeñas cantidades de datos.

* Nombre del archivo: RSAUtil.java

* @author Zhao Feng

* Versión: 1.0.1
p>

* Descripción: Este algoritmo está tomado de Internet y es una implementación del algoritmo RSA

* Hora de creación: 2009-7-10 09:58:16 PM

* Descripción del archivo: primero genere dos números primos grandes y luego genere la clave de descifrado de acuerdo con el algoritmo euclidiano

*/

clase pública RSAUtil {

p>

// Par de claves

Par de claves privado par de claves = nulo

/**

* Inicializar; par de claves

*/

public RSAUtil(){

prueba {

this.keyPair = this.generateKeyPair(); /p>

} catch (Excepción e) {

e.printStackTrace()

}

}

}

/ **

* Generar par de claves

* @return KeyPair

* @throws Excepción

*/

keyPair privado generateKeyPair() lanza una excepción {

try {

KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA",new org.bouncycastle.jce .provider.BouncyCastleProvider())

// Este valor está relacionado con el tamaño del bloque de cifrado y se puede cambiar.

genKeyPair();

return keyPair;

} catch (Excepción e) {

lanzar nueva excepción (e.getMessage());

}

}

Devolver par de claves.

}

}

/**

* Generar clave pública

* @param módulo p>

* @param publicExponent

* @return RSAPublicKey

* @throws Excepción

*/ <

RSAPublicKey privada generarRSAPublicKey(byte[] módulo, byte[] publicExponent) lanza una excepción {

KeyFactory keyFac = null

try {

keyFac = KeyFactory.getInstance; (" RSA", nueva org.bouncycastle.jce.provider.BouncyCastleProvider());

} catch (NoSuchAlgorithmException ex) {

throw new Exception(ex.getMessage()) ;

}

* Prueba

* @param args

* @throws Excepción

*/

public static void main(String[] args) throws Exception {

RSAUtil rsa = new RSAUtil()

String str = "Las ocho partes del Sky y los héroes del cóndor"

RSAPublicKey pubKey = rsa.getRSAP publicKey();

RSAPrivateKey priKey = rsa.getRSAPrivateKey();

// System. out.println("Encoder.out.println("Encoder.println("Después del cifrado: "+mw);

// System.out.println("Después del descifrado: " );

System.out.println("Después del descifrado == " + new String(rsa.decrypt(priKey,rsa.encrypt(pubKey,str.getBytes()))));

}

}

}