Cryptage en Java et Decrypt en C # Pour AES 256 bit
1.J'ai java fonction de crypter le fichier xml et le retour Chaîne cryptée.
///Java Class
import java.security.Key;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
public class Crypt {
public static String key = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
public static byte[] key_Array = Base64.decodeBase64(key);
public static String encrypt(String strToEncrypt)
{
try
{
//Cipher _Cipher = Cipher.getInstance("AES");
//Cipher _Cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING");
//Cipher _Cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
Key SecretKey = new SecretKeySpec(key_Array, "AES");
Cipher _Cipher = Cipher.getInstance("AES");
_Cipher.init(Cipher.ENCRYPT_MODE, SecretKey);
return Base64.encodeBase64String(_Cipher.doFinal(strToEncrypt.getBytes()));
}
catch (Exception e)
{
System.out.println("[Exception]:"+e.getMessage());
}
return null;
}
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
sb.append("xml file string ...");
String EncryptedString = encrypt(sb.toString());
System.out.println("[EncryptedString]:"+EncryptedString);
}
}
2.J'ai le c# fonction qui déchiffrer le message chiffré en fonction java.
///C# Function
private static string Decrypt(string encryptedText)
{
RijndaelManaged aesEncryption = new RijndaelManaged();
aesEncryption.BlockSize = 256;
//aesEncryption.KeySize = 256;
//aesEncryption.Mode = CipherMode.CBC;
//aesEncryption.Padding = PaddingMode.PKCS7;
string keyStr = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
//string ivStr = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
byte[] keyArr = Convert.FromBase64String(keyStr);
//byte[] ivArr = Convert.FromBase64String(ivStr);
aesEncryption.Key = keyArr;
//aesEncryption.IV = ivArr;
ICryptoTransform decrypto = aesEncryption.CreateDecryptor();
byte[] encryptedBytes = Convert.FromBase64CharArray(encryptedText.ToCharArray(), 0, encryptedText.Length);
byte[] decryptedData = decrypto.TransformFinalBlock(encryptedBytes, 0, encryptedBytes.Length); ///CryptographicException: Length of the data to decrypt is invalid.
return ASCIIEncoding.UTF8.GetString(decryptedData);
}
Java chiffrer la fonction est de bien travailler. Mais le problème, c'est C# fonction,
quand j'décrypter j'en dessous de message d'erreur
CryptographicException: Length of the data to decrypt is invalid.
J'ai cherché des solutions à l'aide ci-dessous réf
- Le Chiffrement AES en Java et le Déchiffrement en C#
- C# /Java | AES256 crypter/décrypter
- Encyption/Déchiffrement en C# et Java
mais j'ai toujours face à la même erreur.Quelqu'un pourrait-il me donner une suggestion svp.
Mis à jour
Je Viens de changer mon C# crypto fonction. Ci-dessous mon changement listes
- Taille de bloc de 128
- Taille de clé de 256
- IV Taille de 16
- La Taille de la clé à 32
///Updated decrypt function
private static string Decrypt(string encryptedText)
{
RijndaelManaged aesEncryption = new RijndaelManaged();
aesEncryption.BlockSize = 128;
aesEncryption.KeySize = 256;
//aesEncryption.Mode = CipherMode.CBC;
aesEncryption.Padding = PaddingMode.None;
string keyStr = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
string ivStr = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
byte[] ivArr = Convert.FromBase64String(ivStr);
byte[] IVkey16BytesValue = new byte[16];
Array.Copy(ivArr, IVkey16BytesValue, 16);
byte[] keyArr = Convert.FromBase64String(keyStr);
byte[] KeyArr32BytesValue = new byte[32];
Array.Copy(keyArr, KeyArr32BytesValue, 32);
aesEncryption.IV = IVkey16BytesValue;
aesEncryption.Key = KeyArr32BytesValue;
ICryptoTransform decrypto = aesEncryption.CreateDecryptor();
byte[] encryptedBytes = Convert.FromBase64CharArray(encryptedText.ToCharArray(), 0, encryptedText.Length);
byte[] decryptedData = decrypto.TransformFinalBlock(encryptedBytes, 0, encryptedBytes.Length);
return ASCIIEncoding.UTF8.GetString(decryptedData);
}
En ce moment, aucune erreur ne se produisent. Mais j'obtiens un message déchiffré que je ne peux pas lire.
g:�g:�\0�\td��Y\\符O����\rL��W�wHm�>f�\au����%��0��\ ..........
�\td��Y\\符O����\rL��W�wHm�>f�\au����%��0��\ ..........
S'il vous plaît laissez-moi obtenir votre suggestion de nouveau.
source d'informationauteur Frank Myat Thu
Vous devez vous connecter pour publier un commentaire.
Je crois que la taille de bloc doit être de 128 et de la taille de la clé est de 256. Le keyStr devrait être de 32 caractères de long et le IVstr devrait être de 16 caractères de long. Cela peut aider comme il se décrit pourquoi 128 bits doivent être utilisés pour la taille du bloc et que les tailles de clé peut être. csrc.nist.gov/publications/fips/fips197/fips-197.pdf
Vous avez cela dans le déchiffrer méthode.
Je crois que vous avez besoin de mettre cela dans le cryptage de la méthode aussi.
Aussi pourquoi ne pas utiliser cette méthode pour la clé et IV.