¿PBKDF2 en Java con Bouncy Castle vs .NET Rfc2898DeriveBytes?

Tengo un código C # que genera una clave usando PBKDF2.

//byte[] salt = new RNGCryptoServiceProvider().GetBytes(salt);
byte[] salt = new byte[] { 19, 3, 248, 189, 144, 42, 57, 23 }; // for testing

byte[] bcKey = new Rfc2898DeriveBytes("mypassword", salt, 8192).GetBytes(32);

Esto funciona bien Estoy tratando de implementar lo mismo en Java con Bouncy Castle. No puedo hacer que funcione (el hecho de que Java carece de tipos sin signo lo hace aún más molesto).

SecureRandom random = new SecureRandom();
byte[] salt = u2s(new int[] { 19, 3, 248, 189, 144, 42, 57, 23 });
//random.nextBytes(salt);

PBEParametersGenerator generator = new PKCS5S2ParametersGenerator();
generator.init(PBEParametersGenerator.PKCS5PasswordToUTF8Bytes(("BLK" + password).toCharArray()), salt, keyTransformationRounds);
KeyParameter params = (KeyParameter)generator.generateDerivedParameters(keyLengthBits);
byte[] bcKey = params.getKey();
int[] bcKeyU = s2u(bcKey);
System.out.println(new String(Base64.encode(bcKey), "UTF-8"));

// Helper functions because Java has no unsigned types
//
// EDIT: THESE FUNCTIONS ARE INCORRECT.
// See my answer below for the correct versions.
//
static byte[] u2s(int[] unsignedArray) throws IOException
{
    byte[] signedArray = new byte[unsignedArray.length];
    for (int i = 0; i < signedArray.length; i++)
    {
        if (unsignedArray[i] < 0 || unsignedArray[i] > 255)
        {
            throw new IOException("unsignedArray at " + i + " was not within the range 0 to 255.");
        }

        signedArray[i] = (byte)(unsignedArray[i] - 128);
    }

    return signedArray;
}

static int[] s2u(byte[] signedArray)
{
    int[] unsignedArray = new int[signedArray.length];
    for (int i = 0; i < unsignedArray.length; i++)
    {
        unsignedArray[i] = (int)(signedArray[i] + 128);
    }

    return unsignedArray;
}

Los conjuntos de bytes bcKey resultantes difieren. ¿Qué estoy haciendo mal? ¿Voy a manejar la conversión de sin firmar a firmado correctamente o eso no funcionará como esperaba?

Respuesta 1

Soy nuevo en LIBGDX, hice 40 cuadros para sprites "hero running" y no sé si es mejor usar spritesheet o imágenes individuales. Spritesheet será muy grande, porque quiero una alta resoultion ...

Clase principal import java.util.Scanner; calculadora de clase {public static void main (String args []) {Scanner input = new Scanner (System.in); Adición objecta = nueva Adición (); ...

Realmente he estado luchando por obtener código de trabajo, buenos ejemplos y, lo que es más importante, buena documentación sobre cómo usar Java SDK de Paypal para cifrar pagos de sitios web. He buscado ayuda en Paypal ...

La clase IntStream tiene los métodos map (), mapToObj (), mapToLong () y mapToDouble (), pero estos métodos parecen faltar en la clase OptionalInt. ¿Hay una buena razón para que esos métodos sean ...