Pregunta

Estoy desarrollando una aplicación, que hace uso de algunos servicios web REST. Es documentación técnica dice que debería pasar de hash SHA256 de alguna cadena en la solicitud.

En un ejemplo de solicitud (en la documentación) una cadena:

  

hn-Rw2ZHYwllUYkklL5Zo_7lWJVkrbShZPb5CD1expires = 1893013926label [0] = cualquier / somestatistics = 1d, 2d, 7d, 28d, 30d, 31d, lifetimestatus = UPL, livetitle = a

Después de ejecutar:

digest = Digest::SHA256.digest(string_to_sign)
signature = Base64::encode64(digest).chomp.gsub(/=+$/, '')

resultados en un hash:

  

YRYuN2zO + VvxISNp / vKQM5Cl6Dpzoin7mNES0IZJ06U

Este ejemplo está en rubí, ya que la documentación es para los desarrolladores de rubí.

Estoy desarrollando mi aplicación en C # y para la misma cadena exactamente, cuando yo haga:

byte[] rawHash = sha256.ComputeHash(rawRequest, 0, rawRequest.Length);
string friendlyHash = Convert.ToBase64String(rawHash);

y retire el trailing "=" signos, me sale:

  

Vw8pl / KxnjcEbyHtfNiMikXZdIunysFF2Ujsow8hyiw

y por lo tanto, la aplicación no se ejecuta lo que resulta en un error de falta de coincidencia de firma.

He intentado cambiar la codificación, mientras que la conversión de la cadena a una matriz de bytes que precede a la hash y nada cambió.

¿Alguna idea?

¿Fue útil?

Solución

Con base en el documento aquí , se echa en falta un - (que es una guión) en su cadena. Parece que Acrobat amablemente lo elimina en una goma de la copia del documento ...

Aquí hay un código que Splatted juntos que obtiene el mismo valor que el ejemplo (así lo haría si ha recortado los finales =)

    string s = "hn-Rw2ZH-YwllUYkklL5Zo_7lWJVkrbShZPb5CD1expires=1893013926label[0]=any/somestatistics=1d,2d,7d,28d,30d,31d,lifetimestatus=upl,livetitle=a";

    SHA256Managed sh = new SHA256Managed();
    byte[] request = System.Text.UTF8Encoding.UTF8.GetBytes(s);
    sh.Initialize();
    byte[] b4bbuff = sh.ComputeHash(request, 0, request.Length);

    string b64 = Convert.ToBase64String(b4bbuff);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top