2017-09-23 2 views
0

j'ai créé suivant la méthodeXML cryptage de chaîne me donner des données ne doit pas être plus long que 245 octets lorsque vous utilisez RSA

public static PublicKey readPublicKey(String filename) throws IOException, NoSuchAlgorithmException, InvalidKeySpecException { 

    PublicKey key = null; 
    CertificateFactory fact; 

    try { 

     // MBFS certificate to be used 
     FileInputStream is = new FileInputStream(filename); 
     fact = CertificateFactory.getInstance("X.509"); 
     System.out.println(is.toString()); 
     X509Certificate cer = (X509Certificate) fact.generateCertificate(is); 
     key = cer.getPublicKey(); 
     System.out.println(key.getAlgorithm()); 

    } catch (CertificateException e) { 

     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    return key; 
} 

pour le cryptage

public static byte[] encrypt(PublicKey key, byte[] plaintext) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException { 

    Cipher cipher = Cipher.getInstance("RSA"); 
    cipher.init(Cipher.ENCRYPT_MODE, key); 
    return cipher.doFinal(plaintext); 
} 

J'ai longue chaîne xml et l'utilisation de ces deux méthode comme suit

byte[] message = xmlMessage.getBytes(); 

byte[] secret = encrypt(publicKey, message); 

Mais il me donne des données ne doit pas être plus long que 256 octets lors de l'utilisation rsa

Le certificat est le fragment par le client il dit l'algorithme de signature sha256RS.

Répondre

0

Typiquement, vous utiliseriez un chiffrement symétrique pour chiffrer le document (avec une clé secrète aléatoire), puis crypter simplement la clé avec RSA. Cela ne permet pas seulement de résoudre le problème de longueur, mais il est également beaucoup plus rapide.

+0

merci tout lien ou dépendances mvn –

+0

Je l'ai fait avec la clé Randome, mais comment puis-je utiliser ma clé publique pour la même clé –

+0

Vous avez déjà cette partie: 'encrypt (pubKey, randomKey)' – Henry