Je travaille sur une application Android et je dois utiliser le chiffrement pour un aspect de celle-ci. Je suis vraiment indifférent à l'algorithme que j'utilise (AES, DES, RSA, etc ...). Je suis conscient que Java a un paquet crypto, mais je ne le connais pas du tout. Quelqu'un peut-il poster un exemple sur la façon de faire une fonction de chiffrement/déchiffrement?
La bibliothèque Java AES
contient une faille qui permet, dans les bonnes circonstances, à un auditeur de déchiffrer les paquets envoyés. Voir Padding Oracle Exploit Tool vs Apache MyFaces .
Cela étant dit, consultez cette question SO Encryptage AES 256 bits Java .
Bouncy Castle AES EXAMPLE volé à: http://www.Java2s.com/Code/Java/Security/EncryptionanddecryptionwithAESECBPKCS7Padding.htm
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
public class MainClass {
public static void main(String[] args) throws Exception {
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
byte[] input = "www.Java2s.com".getBytes();
byte[] keyBytes = new byte[] { 0x00, 0x01, 0x02, 0x03, 0x04,
0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c,
0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14,
0x15, 0x16, 0x17 };
SecretKeySpec key = new SecretKeySpec(keyBytes, "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS7Padding", "BC");
System.out.println(new String(input));
// encryption pass
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] cipherText = new byte[cipher.getOutputSize(input.length)];
int ctLength = cipher.update(input, 0, input.length, cipherText, 0);
ctLength += cipher.doFinal(cipherText, ctLength);
System.out.println(new String(cipherText));
System.out.println(ctLength);
// decryption pass
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] plainText = new byte[cipher.getOutputSize(ctLength)];
int ptLength = cipher.update(cipherText, 0, ctLength, plainText, 0);
ptLength += cipher.doFinal(plainText, ptLength);
System.out.println(new String(plainText));
System.out.println(ptLength);
}
}
Je voudrais également vérifier la dissimulation pour voir si cela correspond à votre facture. Il possède une API facile à utiliser qui résume les détails cryptographiques: https://github.com/facebook/conceal/
Regardez ma réponse ici Cryptage de la base de données Android . Il contient 2 fichiers que vous pouvez inclure dans n’importe laquelle de vos applications nécessitant le chiffrement du stockage de données.
Considérant la surcharge de chiffrer et déchiffrer les données dans Android, j'ai conçu une bibliothèque qui ne repose que sur les bibliothèques natives Android et Java pour simplifier au maximum le processus.
Pour l’installer, utilisez le centre de distribution jcenter .
compile 'com.tinmegali.Android:mcipher:0.4'
Utilisation
String ALIAS = "alias"
MEncryptor encryptor = new MEncryptorBuilder( ALIAS ).build();
MDecryptor decryptor = new MDecryptorBuilder( ALIAS ).build();
String toEncrypt = "encrypt this string";
// encrypting
String encrypted = encryptor.encryptString( toEncrypt, this );
// decrypting
String decrypted = decryptor.decryptString( encrypted, this );
Compatible avec le SDK 19+, MCipher s’adapte automatiquement aux blocs de données plus petits et plus volumineux. Par défaut, il utilise AES/GCM/NoPadding
pour les SDK 23+ et RSA/ECB/PKCS1Padding
pour les versions antérieures.