Les fonctions asymétriques suivantes sont utilisées pour crypter et décrypter dans android .. il fonctionne parfaitement. Toutefois, lorsque je crypte en utilisant la fonction ci-dessous et décrypter en utilisant php ou une autre fonction (ce qui est assez similaire en utilisant éclipse) .. Je reçois null .. mauvaise exception padding .. Je ne peux pas résoudre le problème .. comme je suis le résultat .. et pourquoi ne fonctionne que si je crypte et décrypte en android ou en éclipse .. mais ne fonctionne pas entre PHP et Android ou simplement entre deux programmes Java .. mais sur Eclipse et Android ..Cryptage asymétrique entre android et php
Programme Android :
public String encryptAsymmetric(String input, Key key) throws GeneralSecurityException, IOException {
byte[] crypted = null;
try{
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, key);
crypted = cipher.doFinal(input.getBytes());
}catch(Exception e){
System.out.println(e.toString());
}//Base64.encodeBase64(crypted)
return new String(Base64.encode(crypted, Base64.DEFAULT));
}
public String decryptAsymmetric(String input, Key key){
byte[] output = null;
try{
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, key);//Base64.decodeBase64(input.getBytes())
output = cipher.doFinal(Base64.decode(input.getBytes(), Base64.DEFAULT));
}catch(Exception e){
System.out.println(e.toString());
}
return new String(output);
}
Eclipse (programme Java, ainsi):
public static String encryptAsymmetric(String input, Key key){
byte[] crypted = null;
try{
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, key);
crypted = cipher.doFinal(input.getBytes());
}catch(Exception e){
System.out.println(e.toString());
}//Base64.encodeBase64(crypted)
return new String(Base64.getEncoder().encode(crypted));
}
public static String decryptAsymmetric(String input, Key key){
byte[] output = null;
try{
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, key);//Base64.decodeBase64(input.getBytes())
output = cipher.doFinal(Base64.getDecoder().decode(input.getBytes()));
}catch(Exception e){
System.out.println(e.toString());
}
return new String(output);
}
'Cipher.getInstance (" RSA ");' repose sur le mode et le remplissage par défaut et n'est * pas * portable. Ne fais jamais cela. 'input.getBytes()' repose sur le jeu de caractères par défaut et n'est * pas * portable. Ne fais jamais cela. –
pouvez-vous expliquer ce que vous entendez par portable dans ce contexte? –
Le même code produira des résultats différents sur des plates-formes avec différents jeux de caractères par défaut et produira des résultats différents sur les plates-formes Oracle Oracle par rapport aux plates-formes Android. –