Преобразование алгоритма AES128, написанного на Java, в C#C#

Место общения программистов C#
Ответить
Anonymous
 Преобразование алгоритма AES128, написанного на Java, в C#

Сообщение Anonymous »


У меня есть алгоритм шифрования AES128, написанный на Java. Мне нужно написать тот же самый алгоритм на С#. Я сделал несколько примеров, но не смог получить тот же результат, что и в Java. Я совершенно новичок в логике шифрования.

Я делюсь здесь логикой Java и примерами, реализованными на C#. Пожалуйста, дайте мне знать, что здесь нужно изменить, чтобы получить копию JAVA, или предложите, есть ли другие способы реализовать то же самое.

Код Java

import java.security.SecureRandom; импортировать java.security.spec.InvalidKeySpecException; импортировать java.security.spec.KeySpec; импортировать java.util.Arrays; импортировать javax.crypto.BadPaddingException; импортировать javax.crypto.Cipher; импортировать javax.crypto.SecretKey; импортировать javax.crypto.SecretKeyFactory; импортировать javax.crypto.spec.IvParameterSpec; импортировать javax.crypto.spec.PBEKeySpec; импортировать javax.crypto.spec.SecretKeySpec; импортировать org.apache.commons.codec.binary.Base64; импортировать com.verizonwireless.ecare.Exception.OutOfServiceException; общественный класс JavaAlgorithm { частная статическая окончательная строка PROVIDER = "AES/CBC/PKCS5Padding"; частная статическая окончательная строка IV_ALGORITHM = "SHA1PRNG"; частная статическая финальная строка UNIQUE_FACTORY_ALGORITHM = "PBKDF2WithHmacSHA1"; частная статическая окончательная строка UNIQUE_ALGORITHM = "AES"; частная статическая окончательная строка АЛГОРИТМ = "HmacSHA1"; частный статический окончательный int IV_SIZE = 16; частный статический финал int SALT_SIZE = 32; частный статический окончательный int KEY_SIZE = 128; частный статический финал int ITERATION_COUNT = 65536; // Используется для шифрования открытого текста частный SecretKeySpec secretKey; частный SecretKeyFactory secretKeyFactory; частный SecureRandom secureRandom; шифр частного шифрования; частный int iterationCount; общественный JavaAlgorithm (String EncryptionKey) { это (encryptionKey, ITERATION_COUNT); } public JavaAlgorithm (String EncryptionKey, int iterationCount) { пытаться { this.secretKey = новый SecretKeySpec(Base64.decodeBase64(encryptionKey), АЛГОРИТМ); this.secretKeyFactory = SecretKeyFactory.getInstance(UNIQUE_FACTORY_ALGORITHM); this.secureRandom = SecureRandom.getInstance(IV_ALGORITHM); this.cipher = Cipher.getInstance(ПРОВАЙДЕР); this.iterationCount = iterationCount; } catch (Throwable e) { } } общедоступное шифрование строки (StringclearText) { пытаться { байт[] соль = генерироватьСоль(); SecretKey sk =generateUniqueKey(соль); байт[] iv = генерироватьIV(); IvParameterSpec ivs = новый IvParameterSpec(iv); // зашифровываем открытый текст байт [] textEncrypted = ноль; синхронизированный (шифр) { cipher.init(Cipher.ENCRYPT_MODE, sk, ivs); textEncrypted = cipher.doFinal(clearText.getBytes()); } // но 3 вещи вместе: соль + хэш + зашифрованные данные byte[] cipherText = новый байт[SALT_SIZE + IV_SIZE + textEncrypted.length]; System.arraycopy(salt, 0, cipherText, 0, SALT_SIZE); System.arraycopy(iv, 0, cipherText, SALT_SIZE, IV_SIZE); System.arraycopy(textEncrypted, 0, cipherText, SALT_SIZE + IV_SIZE, textEncrypted.length); Строка FinalEncrypted = Base64.encodeBase64String(cipherText); вернуть FinalEncrypted; } catch (Throwable t) { вернуть ноль; } } расшифровка публичной строки (строка base64encrypted) { вернуть расшифровку (base64encrypted, false); } публичная строка decrypt (String base64encrypted, логическое подавлениеError) { пытаться { byte[] decodedBytes = Base64.decodeBase64(base64encrypted.getBytes()); if (decodedBytes.length
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»