RSA exemple qui n'utilisent pas NoPadding
Où puis-je trouver un RSA chiffrer exemple qui ne pas utiliser "NoPadding"?
--mise à jour
Mieux: comment faire de cette SSCCE fonctionnent correctement, sans jeter le "trop de données pour RSA bloc" exception?
import java.math.BigInteger;
import java.security.KeyFactory;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.RSAPrivateKeySpec;
import java.security.spec.RSAPublicKeySpec;
import javax.crypto.Cipher;
/**
* Basic RSA example.
*/
public class TestRSA {
public static void main(String[] args) throws Exception {
byte[] input = new byte[100];
Cipher cipher = Cipher.getInstance("RSA/None/NoPadding", "BC");
KeyFactory keyFactory = KeyFactory.getInstance("RSA", "BC");
//create the keys
RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(new BigInteger("d46f473a2d746537de2056ae3092c451",
16), new BigInteger("11", 16));
RSAPrivateKeySpec privKeySpec = new RSAPrivateKeySpec(new BigInteger(
"d46f473a2d746537de2056ae3092c451", 16), new BigInteger("57791d5430d593164082036ad8b29fb1",
16));
RSAPublicKey pubKey = (RSAPublicKey) keyFactory.generatePublic(pubKeySpec);
RSAPrivateKey privKey = (RSAPrivateKey) keyFactory.generatePrivate(privKeySpec);
//encryption step
cipher.init(Cipher.ENCRYPT_MODE, pubKey);
byte[] cipherText = cipher.doFinal(input);
//decryption step
cipher.init(Cipher.DECRYPT_MODE, privKey);
byte[] plainText = cipher.doFinal(cipherText);
}
}
--mise à jour: à propos de la boucle
À l'aide de:
byte[] cipherText = new byte[input.length];
for (int i = 0; i < input.length; i++) {
byte[] singleByteArray = new byte[] { input[i] };
cipherText[i] = cipher.doFinal(singleByteArray)[0];
}
ne fonctionne pas bien. Pour une raison inconnue, le texte chiffré est devenu rempli de zéros - même si l'entrée est un tableau de 0x03.
- Donc, un exemple qui utilise un protocole de remplissage?
- question mise à jour
- eh bien, avez-vous essayez de l'appeler juste
getInstance("RSA")
? Avez-vous réellement besoin de la colombie-britannique pour cela? - oui je tryied, et même échouer à se produire. À propos de la colombie-britannique, je ne sais pas, je n'ai jamais travailler avec la cryptographie avant, j'ai obtenu cet exemple à partir d'un livre. Si vous avez le même lien pour moi, je voudrais être reconnaissants.
- Votre dernière mise à jour tronque le texte chiffré. Essayer de déchiffrer le tableau complet à la place. Aussi, depuis votre clé actuelle ne permet que de chiffrer les messages d'une taille d'environ 6 ou moins d'octets, il serait utile si vous avez utilisé une clé avec un plus grand module.
- en déchiffrant le tableau complet nous beck le début de cette question. Et à propos de la taille, je voudrais que le rsa pour crypter n'importe quelle taille, et pas seulement un maximum spécifié. Après de résoudre ce je vais enlange la taille pour l'utilisation finale.
Vous devez vous connecter pour publier un commentaire.
La Soleil Les Fournisseurs De Documentation pour la SunJCE fournisseur vous dit ce rembourrage spécifications sont autorisés dans l'algorithme de Chiffrement.getInstance() argument. Essayez
Cipher.getInstance("RSA/ECB/PKCS1PADDING");
EDIT:
Ce n'est pas un problème de remplissage, il est plus que vous avez une mauvaise compréhension de la façon dont RSA est utilisé en cryptographie. Vous pouvez soit: 1) rendre le module plus grand que les données, 2) l'utilisation d'un Hybride cryptosystème, ou 3) moins souhaitable est manuellement briser l'entrée en morceaux qui sont chacune plus petit que le module. Si vous allez utiliser PKCS1 rembourrage (ce qui est généralement recommandé), puis l'entrée ne doit pas être plus grand que n-11 octets de longueur n, où n est le nombre d'octets nécessaires pour stocker le module RSA.
Mise à jour: Êtes-vous sûr que vous avez besoin bouncycastle pour cela? Et pourquoi ne pas simplement passer
RSA
comme argument pourCipher.getInstance(..)
?Mise à jour 2: Pourquoi n'essayez-vous pas un de ces Le cryptage RSA, exemples?
KeyPairGenerator
?KeyPairGenerator
de faire de nouvelles clés et de les essayer.