Shameer.Abdul Ответов: 1

Преобразование кода шифрования C# в java


Я пытался сделать расшифровку на java для точно такой же расшифровки, описанной в Библиотека шифрования C# AES 256 бит с солью[^] который является C# . Но я не могу получить тот же результат , может ли кто-нибудь помочь.

Что я уже пробовал:

byte[] salt = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };

			SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
			
			MessageDigest md = MessageDigest.getInstance("SHA-256" );
			
			md.update(KEY_IV.getBytes( StandardCharsets.UTF_8 ) );
			byte[] hashDigest = md.digest();
			
		
			String encryptedHashDigest = Base64.encodeBase64String(hashDigest);
			
			PBEKeySpec pbeKeySpec = new PBEKeySpec(encryptedHashDigest.toCharArray(),
					salt, 1000, 384);

			Key generatedKey = factory.generateSecret(pbeKeySpec);

			byte[] extractedKey = new byte[32];
			byte[] iv = new byte[16];


			System.arraycopy(generatedKey.getEncoded(), 0, extractedKey, 0, 32);
			System.arraycopy(generatedKey.getEncoded(), 32, iv, 0, 16);

			
			byte[] base64Decoded = Base64.decodeBase64(toBeDecrypted);

			Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");

			c.init(2, new SecretKeySpec(extractedKey, "AES"), new IvParameterSpec(iv));

			byte[] decryptedBytes = c.doFinal(base64Decoded);

			System.out.println("Decrypted " + new String(Base64.encodeBase64(decryptedBytes), StandardCharsets.UTF_8));

Richard MacCutchan

Как помочь?

David_Wimbley

Вместо того чтобы пытаться портировать что-то, что, я уверен, было сделано много раз в java, почему бы просто не использовать библиотеку java или не выполнить поиск в google для шифрования java aes256? Мне это кажется бессмысленным

AES256 шифрования в Java

Множество ссылок на первой странице результата google даст вам тот же результат и, вероятно, гораздо быстрее.

Shameer.Abdul

Привет Дэвид,
Техника шифрования для расшифровки текста такая же, как и выше. При расшифровке нам нужен IV и ключ для расшифровки AES/CBC, но предоставляется только один ключ длиной 48, который имеет как ключ, так и iv, и нас просят извлечь его из предоставленного ключа. поэтому приведенный выше способ расшифровки является обязательным. В любом случае спасибо за ваше предложение