У меня есть зашифрованный текст из библиотеки надувных замков Java с использованием AES/GCM, который я не могу расшифровJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 У меня есть зашифрованный текст из библиотеки надувных замков Java с использованием AES/GCM, который я не могу расшифров

Сообщение Anonymous »

У меня есть текст, который я шифрую с помощью утилиты Java's Bouncy Castle AES/GCM.

Код: Выделить всё

 public class CustomAESGCMCryptor {

private BytesEncryptor encryptor;
public CustomAESGCMCryptor(String secretKey) {
encryptor = new BouncyCastleAesGcmBytesEncryptor("", secretKey);
}

public String encrypt(String text) {
return new String(Base64.encode(encryptor.encrypt(text.getBytes())), StandardCharsets.UTF_8);
}
}
Утилита Java's Bouncy Castle AES/GCM использует 16 байта IV по умолчанию.
Симметричный ключ генерируется с использованием приведенного ниже кода -
private String generateSymmetricKey() throws NoSuchAlgorithmException {

KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(256);
Key key = keyGen.generateKey();

return new String(encodeHex(key.getEncoded()));
}
< /code>
Я должен расшифровать текст шифра в C#, для которого я использую приведенный ниже код -< /p>
namespace Symmetric_Decryption_AES_GCM_C_ {

class Program
{
static void Main(string[] args)
{
String encryptedToken = "cipher";

String secretKey = "key";

Console.WriteLine(DecryptPayload(encryptedToken, secretKey));
}

private static string DecryptPayload(string base64EncryptedToken, string stringKey)
{
Console.WriteLine("----C# Decryption Details----");
byte[] encryptedToken = Convert.FromBase64String(base64EncryptedToken); // Converting the base64 string encrypted text to byte[]

byte[] key = Enumerable.Range(0, stringKey.Length / 2)
.Select(i => Convert.ToByte(stringKey.Substring(i * 2, 2), 16))
.ToArray(); // Converting hex encoded key to byte[]

int ivLength = 16;
int ciphertextTagLength = encryptedToken.Length - ivLength;

byte[] iv = new byte[ivLength];
byte[] ciphertextTag = new byte[ciphertextTagLength];

Buffer.BlockCopy(encryptedToken, 0, iv, 0, ivLength);
Buffer.BlockCopy(encryptedToken, ivLength, ciphertextTag, 0, ciphertextTagLength);

return DecryptWithGCM(ciphertextTag, key, iv);
}

private static string DecryptWithGCM(byte[] ciphertextTag, byte[] key, byte[] nonce)
{
var cipher = new GcmBlockCipher(new AesEngine());
cipher.Init(false, new AeadParameters(new KeyParameter(key), 128, nonce, null));

int outputSizeDecryptedData = cipher.GetOutputSize(ciphertextTag.Length);

byte[] decryptedBytes = new byte[outputSizeDecryptedData];

int processedBytes = cipher.ProcessBytes(ciphertextTag, 0, ciphertextTag.Length, decryptedBytes, 0);

cipher.DoFinal(decryptedBytes, processedBytes);

return Encoding.UTF8.GetString(decryptedBytes);
}
}
}
< /code>
Этот код расшифровки работает нормально, если я зашифрую текст в C#, следовательно, код работает.
Но когда я даю зашифрованный текст, сгенерированный из кода Java, я получаю - 'Mac Проверка в GCM'.>

Подробнее здесь: https://stackoverflow.com/questions/797 ... cm-which-i
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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