AES Encryption C # -> Java - PullRequest
       20

AES Encryption C # -> Java

0 голосов
/ 12 декабря 2018

Мне нужно преобразовать этот код (C #) в Java:

private static string hash(string _param0, byte[] _param1)
{
    byte[] bytes = Encoding.UTF8.GetBytes(_param0.ToLowerInvariant());
    byte[] inputBuffer = new byte[16];

    for (int index = 0; index < bytes.Length; ++index)
        inputBuffer[index % 16] ^= bytes[index];

    using (Aes aes = Aes.Create())
    {
        aes.Padding = PaddingMode.None;
        aes.Mode = CipherMode.CBC;
        using (ICryptoTransform encryptor = aes.CreateEncryptor(_param1, new byte[16]))
        {
            for (int index = 0; index < 16384; ++index)
                inputBuffer = encryptor.TransformFinalBlock(inputBuffer, 0, inputBuffer.Length);
        }
    }

    byte[] inArray = new byte[8];
    Array.Copy((Array)inputBuffer, 0, (Array)inArray, 0, 4);
    Array.Copy((Array)inputBuffer, 8, (Array)inArray, 4, 4);

    return Convert.ToBase64String(inArray).Replace('+', '-').Replace('/', '_').Replace("=", string.Empty);
}

public static T[] encryptUntil<T>(this T[] _param0, int _param1, int _param2)
{
    T[] objArray = new T[_param1];

    while (--_param1 >= 0)
    {
        if (_param0.Length > _param2 + _param1)
            objArray[_param1] = _param0[_param2 + _param1];
    }

    return objArray;
}

private static byte[] encrypt(string _param0)
{
    byte[] bytes = Encoding.UTF8.GetBytes(_param0);
    byte[] inputBuffer = new byte[16]
    {
        (byte) 147,
        (byte) 196,
        (byte) 103,
        (byte) 227,
        (byte) 125,
        (byte) 176,
        (byte) 199,
        (byte) 164,
        (byte) 209,
        (byte) 190,
        (byte) 63,
        (byte) 129,
        (byte) 1,
        (byte) 82,
        (byte) 203,
        (byte) 86
    };

    for (int index = 0; index < 65536; ++index)
    {
        int num = 0;
        while (num < bytes.Length)
        {
            using (Aes aes = Aes.Create())
            {
                aes.Padding = PaddingMode.None;
                aes.Mode = CipherMode.CBC;
                using (ICryptoTransform encryptor = aes.CreateEncryptor(bytes.encryptUntil<byte>(16, num), new byte[16]))
                    inputBuffer = encryptor.TransformFinalBlock(inputBuffer, 0, inputBuffer.Length);
            }

            num += 16;
        }
    }

    return inputBuffer;
}

Так что в основном это использует Aes с CBC и без заполнения и шифрует строку с использованием массива байтов в качестве ключа.Я пытался использовать Cipher и "AES / CBC / NoPadding", но я не могу понять, как именно это сделать.Если бы кто-то мог помочь мне, я был бы признателен за это!

...