Estoy usando HMAC exactamente como se pretende para verificar la integridad de un mensaje. Sin embargo, el mensaje es realmente una matriz asociativa (o un hash).
Dado que esto se realizará en varias plataformas (dentro y fuera de nuestro control), necesitamos una forma estándar de convertir la matriz en una cadena.
He visto tuberías que se utilizan como separadores en muchos lugares. Esta vulnerabilidad en AWS es el tipo de cosa que quiero evitar.
Diga, mi mensaje es {a:1,b:2}
, ¿convertirlo a a1b2
estaría bien?
O debería ir por algo como 1|2
(entonces el orden de las teclas se vuelve importante).
Otra solución hubiera sido la conversión JSON, pero JSON no garantiza el orden de las claves, por lo que puede dar diferentes resultados en diferentes bibliotecas.
Varias ideas que estamos discutiendo:
data = {:c=>3,:a=>1,:b=>2}
data.sort.join
"a1b2c3"
data.values.sort.join
"123"
data.sort.join('|')
"a|1|b|2|c|3"
Me inclino por la primera o la tercera opción, pero ¿hay alguna forma de juzgar mi enfoque?