Come impostare la crittografia e la decrittografia tra l’applicazione Web Android e ASP.Net?

how-to-setup-encryption-and-decryption-between-android-and-asp

In questa crittografia, utilizzeremo una chiave segreta per crittografare la stringa. L’algoritmo utilizzato sarà AES con modalità CBC (Cipher Block Chaining).

imbottitura

Il codice C# utilizzerà il riempimento PKCS7, poiché PKCS5 non è disponibile lì. In Android, utilizza internamente il riempimento PKCS5, anche se specifichiamo il riempimento PKCS7 nella trasformazione della cifratura. Quindi, stiamo anche specificando la modalità di riempimento PKCS5. Quando testati, entrambi producono gli stessi risultati corretti.

In questo metodo di crittografia, viene utilizzata un’unica chiave sia per la chiave segreta che per il sale.

metodo di crittografia

Quando si utilizzano chiavi diverse per la chiave segreta e il salt, c’era una certa differenza tra le versioni con codifica Base64 del salt (o vettore di inizializzazione). Le versioni con codifica Base64 sono state create da codici Android e C# ed erano diverse l’una dall’altra.

Per ovviare a questo, abbiamo utilizzato un’unica chiave che fungerà sia da chiave segreta che da sale.

Il codice per la parte Android è il seguente:

public class EncryptionUtils { private final String characterEncoding = "UTF-8"; private final String cipherTransformation = "AES/CBC/PKCS5Padding"; private final String aesEncryptionAlgorithm = "AES"; public String encrypt(String plainText, String key) genera UnsupportedEncodingException, InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException { byte [] plainTextbytes = plainText.getBytes(characterEncoding); byte [] keyBytes = getKeyBytes(chiave); // restituisce Base64.encodeToString(encrypt(plainTextbytes,keyBytes, keyBytes), Base64.DEFAULT); return Base64.encodeToString(encrypt(plainTextbytes,keyBytes, keyBytes), Base64.NO_WRAP); } public String decrypt(StringcryptedText, String key) genera KeyException, GeneralSecurityException, GeneralSecurityException, InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException, IOException { byte [] cipheredBytes = Base64.decode(encryptedText, Base64.DEFAULT); byte[] keyBytes = getKeyBytes(chiave); restituisce una nuova stringa (decrypt(cipheredBytes, keyBytes, keyBytes), characterEncoding); } public byte [] decrypt( byte[] cipherText, byte[] key, byte [] initialVector) genera NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException { Cipher cipher = Cipher.getInstance(cipherTransformation); SecretKeySpec secretKeySpecy = new SecretKeySpec(chiave, aesEncryptionAlgorithm); IvParameterSpec ivParameterSpec = new IvParameterSpec(initialVector); cipher.init(Cipher.DECRYPT_MODE, secretKeySpecy, ivParameterSpec); cipherText = cipher.doFinal(cipherText); restituisce testo cifrato; } public byte[] encrypt(byte[] plainText, byte[] key, byte [] initialVector) genera NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException { Cipher cipher = Cipher.getInstance(cipherTransformation); SecretKeySpec secretKeySpec = new SecretKeySpec(chiave, aesEncryptionAlgorithm); IvParameterSpec ivParameterSpec = new IvParameterSpec(initialVector); cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec); testo in chiaro = cifra.doFinal(testo in chiaro); restituire il testo in chiaro; } private byte[] getKeyBytes(String key) genera UnsupportedEncodingException{ byte [] keyBytes= new byte[16]; byte [] parametroKeyBytes= key.getBytes(characterEncoding); Sistema .arraycopy(parametroKeyBytes, 0 , keyBytes, 0, Math.min(parametroKeyBytes.length, keyBytes.length)); restituire keyByte; } } Lettura consigliata: copia negli appunti in JavaScript

Il codice per la parte C# è il seguente:

// Crittografa il testo in chiaro utilizzando una chiave AES a 128 bit e un Chain Block Cipher e restituisce una stringa codificata in base64 public string Encrypt(String plainText, String key) { var plainBytes = Encoding.UTF8.GetBytes(plainText); return Convert.ToBase64String(Encrypt(plainBytes, GetRijndaelManaged(key))); } public string Decrypt(StringcryptedText, String key) { varcryptedBytes = Convert.FromBase64String(encryptedText); return Encoding.UTF8.GetString(Decrypt(encryptedBytes, GetRijndaelManaged(chiave))); } public byte[] Encrypt(byte[] plainBytes, RijndaelManaged rijndaelManaged) { return rijndaelManaged.CreateEncryptor() .TransformFinalBlock(plainBytes, 0, plainBytes.Length); } byte pubblico[] Decrypt(byte[] dati crittografati, RijndaelManaged rijndaelManaged) { return rijndaelManaged.CreateDecryptor() .TransformFinalBlock(encryptedData, 0,cryptedData.Length); } public RijndaelManaged GetRijndaelManaged(String secretKey) { var keyBytes = new byte[16]; var secretKeyBytes = Encoding.UTF8.GetBytes(secretKey); Array.Copy(secretKeyBytes, keyBytes, Math.Min(keyBytes.Length, secretKeyBytes.Length)); return new RijndaelManaged { Mode = CipherMode.CBC, Padding = PaddingMode.PKCS7, KeySize = 128, BlockSize = 128, Key = keyBytes, IV = keyBytes }; }

Con l’aiuto del codice sopra, è possibile crittografare una stringa su una piattaforma, quindi decrittografarla sull’altra piattaforma e viceversa.

Raccomandato Leggi:ï ¿½Come vedere il codice del file ‘.ctp’ colorato come il file ‘.php’ in NetBeans

Leave a Reply

Your email address will not be published. Required fields are marked *