how encriptar create contraseña algoritmo java hash sha1 hmac

encriptar - md5 sha1 java



HMAC-SHA1: ¿Cómo hacerlo correctamente en Java? (4)

Cualquier símbolo $ entre comillas dobles ("") se considera como una variable en PHP. Puede evitar el error utilizando comillas simples como lo señaló el comentador anterior o puede escapar del signo de dólar como se muestra a continuación

hash_hmac("sha1", "helloworld", "PRIE7/$oG2uS-Yf17kEnUEpi5hvW/#AFo")

Aviso $ ahora es / $

Estoy procesando algunos valores usando HMAC-SHA1, usando el siguiente código en Java:

public static String hmacSha1(String value, String key) { try { // Get an hmac_sha1 key from the raw key bytes byte[] keyBytes = key.getBytes(); SecretKeySpec signingKey = new SecretKeySpec(keyBytes, "HmacSHA1"); // Get an hmac_sha1 Mac instance and initialize with the signing key Mac mac = Mac.getInstance("HmacSHA1"); mac.init(signingKey); // Compute the hmac on input data bytes byte[] rawHmac = mac.doFinal(value.getBytes()); // Convert raw bytes to Hex byte[] hexBytes = new Hex().encode(rawHmac); // Covert array of Hex bytes to a String return new String(hexBytes, "UTF-8"); } catch (Exception e) { throw new RuntimeException(e); } }

Hex() pertenece a org.apache.commons.codec

En PHP hay una función similar hash_hmac(algorithm, data, key) que utilizo para comparar los valores devueltos por mi implementación de Java.

Entonces, el primer intento es:

hash_hmac("sha1", "helloworld", "mykey") // PHP

que devuelve: 74ae5a4a3d9996d5918defc2c3d475471bbf59ac

Mi función Java también devuelve 74ae5a4a3d9996d5918defc2c3d475471bbf59ac .

Ok, parece funcionar. Luego trato de usar una clave más compleja:

hash_hmac("sha1", "helloworld", "PRIE7$oG2uS-Yf17kEnUEpi5hvW/#AFo") // PHP

que devuelve: e98bcc5c5be6f11dc582ae55f520d1ec4ae29f7a

Mientras que esta vez mi c19fccf57c613f1868dd22d586f9571cf6412cd0 Java devuelve: c19fccf57c613f1868dd22d586f9571cf6412cd0

El hash devuelto por mi código PHP no es igual al valor devuelto por mi función Java, y no puedo averiguar por qué.

¿Algun consejo?


En Java , y usando maven :

Agregue la dependencia a continuación en el pom.xml :

<!-- https://mvnrepository.com/artifact/commons-codec/commons-codec --> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.4</version> </dependency>

y luego intenta firmarlo usando esto

HmacUtils.hmacSha1Hex(key, string_to_sign);


En su lado de PHP, use comillas simples alrededor de la clave para que el carácter $ no se trate como una referencia de variable. es decir,

hash_hmac("sha1", "helloworld", ''PRIE7$oG2uS-Yf17kEnUEpi5hvW/#AFo'')

De lo contrario, la clave que realmente obtiene es PRIE7-Yf17kEnUEpi5hvW/#AFo (suponiendo que la variable $oG2uS no está definida).