Как я...решаю шифрование с помощью AES 256 с ключом C# к java
Сценарий, подобный API, разработанный на Java и должен потреблять в asp.net с#. Проблема заключается в шифровании и дешифровании полезной нагрузки. Алгоритм AES-256 , генерируемый зашифрованным текстом в c#, не совпадает с Java. Пожалуйста, помогите. заранее спасибо.
Что я уже пробовал:
JAVA CODE : public static void main(String args[]) { MyClass obj = new MyClass(); String mdString = obj.generateAESEncryption("dfgfrhdfgfrhdfgfrhdfgfrhdfgfrhil", "1"); System.out.println(" AES 256 Encrypted Key : " + mdString); } public String generateAESEncryption(String sercretKey, String message) { String base64EncryptedString = ""; MessageDigest md = null; try { md = MessageDigest.getInstance("SHA-256"); byte[] digestOfPassword = md.digest(sercretKey.getBytes(StandardCharsets.UTF_8)); System.out.println(" Message Digest Byte[] String : " + digestOfPassword); byte[] keyBytes = Arrays.copyOf(digestOfPassword, 24); byte[] iv = Arrays.copyOf(digestOfPassword, 16); System.out.println(" keyBytes Byte[] String : " + digestOfPassword); System.out.println(" iv Byte[] String : " + digestOfPassword); SecretKey key = new SecretKeySpec(keyBytes, "AES"); Cipher cipher = null; try { cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); IvParameterSpec ivParameterSpec = new IvParameterSpec(iv); try { cipher.init(Cipher.ENCRYPT_MODE, key, ivParameterSpec); } catch (InvalidAlgorithmParameterException | InvalidKeyException e) { e.printStackTrace(); } byte[] plainTextBytes = message.getBytes(StandardCharsets.UTF_8); System.out.println(" plainTextBytes Byte[] String : " + digestOfPassword); byte[] buf = new byte[0]; try { buf = cipher.doFinal(plainTextBytes); } catch (BadPaddingException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } //byte[] encryptedByteValue = new Base64().encode(buf); byte[] encryptedByteValue = Base64.getEncoder().encode(buf); //String encryptedValue = encryptedByteValue.toString(); base64EncryptedString = new String(encryptedByteValue, StandardCharsets.UTF_8); //Logger.debug("AES : ", "EncryptedValue : " + base64EncryptedString); } catch (NoSuchPaddingException e) { e.printStackTrace(); } } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return base64EncryptedString; } } C# Code : private static string Encrypt_2(string PlainText, String key) { HashAlgorithm Hasher = new SHA256CryptoServiceProvider(); byte[] strBytes = Encoding.UTF8.GetBytes(key); byte[] passBytes = Hasher.ComputeHash(strBytes); RijndaelManaged aes = new RijndaelManaged(); aes.BlockSize = 128; aes.KeySize = 256; // It is equal in java /// Cipher _Cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING"); aes.Mode = CipherMode.CBC; aes.Padding = PaddingMode.PKCS7; byte[] keyArr = Convert.FromBase64String(key); byte[] KeyArrBytes32Value = new byte[24]; Array.Copy(passBytes, KeyArrBytes32Value, 16); // Initialization vector. // It could be any value or generated using a random number generator. byte[] ivArr = { 1, 2, 3, 4, 5, 6, 6, 5, 4, 3, 2, 1, 7, 7, 7, 7 }; byte[] IVBytes16Value = new byte[16]; Array.Copy(ivArr, IVBytes16Value, 16); aes.Key = KeyArrBytes32Value; aes.IV = IVBytes16Value; ICryptoTransform encrypto = aes.CreateEncryptor(); byte[] plainTextByte = ASCIIEncoding.UTF8.GetBytes(PlainText); byte[] CipherText = encrypto.TransformFinalBlock(plainTextByte, 0, plainTextByte.Length); return Convert.ToBase64String(CipherText); }
OriginalGriff
Мы более чем готовы помочь тем, кто застрял, но это не значит, что мы здесь, чтобы сделать все это для вас! Мы не можем сделать всю работу, вам либо платят за это, либо это часть ваших оценок, и было бы совсем несправедливо, если бы мы сделали все это за вас.
Поэтому нам нужно, чтобы вы сделали работу, и мы поможем вам, когда вы застряли. Это не значит, что мы дадим вам пошаговое решение, которое вы можете сдать!
Начните с объяснения, где вы находитесь в данный момент и каков следующий шаг в этом процессе. Затем расскажите нам, что вы пытались сделать, чтобы этот следующий шаг сработал, и что произошло, когда вы это сделали.
BillWoodruff
"сгенерированный зашифрованный текст в c# не совпадает с Java" почему вы смешиваете C# и Java ?