EinerZG
Hi all, I have a problem with the generation of a hash. I have a Javascript code that takes the body of a request, passes it to a string and then generates a hash. I need to pass the code to Elixir, but the results do not match. I share the code with you:
JS
import sha256 from 'crypto-js/sha256';
import Base64 from 'crypto-js/enc-base64';
const body = "my body"
const hashDigest = sha256(body);
const digest = Base64.stringify(hashDigest)
console.log("Digest:", digest);
Result: "IZ2yn/XIIEdwXSkGAK/256XFSNMy33gr0zRZoo+pe/c="
Elixir
def compute_digest(body) do
body
|> Jason.encode!()
|> (&:crypto.hash(:sha256, &1)).()
|> Base.encode64()
|> IO.inspect(label: "Digest")
end
Result: "7om2lOXEa2byLhn1M19iEf9KA6DdnljHD6BMdA8IdLc="
Any ideas on how to solve this problem?
Trending in Questions
Hi all,
I’m working on a Phoenix project where I need to make external HTTP requests and I’m trying to choose between Req and HTTPoison....
New
I’m very new to Elixir, so sorry if this is a silly question:
I am wondering what happens to the mailbox of a process when the machine i...
New
How do I tell Hologram not to escape HTML when substituting into templates?
{Textile.render(@product.long_description)}
escapes the HTM...
New
Background
When trying to execute mix release on a Windows 11 machine for a Phoenix project I get the following error:
* assembling mark...
New
I’d like to create a file with 600 permissions (rw-------), but there’s a race condition if I create it and then change the permissions. ...
New
Is there a way to import record definitions in the iex shell for pretty printing (similar to the rr command in the erl shell)? This woul...
New
When I use Mix.install with a git dependency, using git@github.com:... how do I change the SSH identity used?
I’ve got two Github accoun...
New
Other Trending Topics
Hey there,
I haven’t seen a list of useful Elixir specific skills for the popular AI tools yet so I’m starting one here with my first.
...
New
Hi everyone :waving_hand:
I wanted to share something I’ve been building — NowBlind, a random chat app designed to help people discover ...
New
I fully migrated to my own harness from Anthropic/Gemini and I think it’s time to share it. Welcome DSH, the DeepSeek Harness, fully writ...
New
Hey. Is there anyone here who creates agents in their apps? Not talking about using agents, but creating them. I’m finding it pretty diff...
New
(I just needed to vent somewhere and LinkedIn is full of hope, or hype, I’m not sure which exactly)
AI dream has many faces, but general...
New
Localize is the next generation localisation library for Elixir. Think of it as ex_cldr version 3.0. The first version will be released ...
New
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #library
- #deployment
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #elixirconf
- #channels
- #exunit
- #code-sync
- #discussion
- #podcasts
- #javascript
- #onsite
- #dialyzer
- #docker
- #authentication
- #ai
- #umbrella
- #elixirconf-us
- #full-time-contract
- #podcasts-by-brainlid
- #blog-post
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #elixirconf-eu
- #processes
- #security
- #api
- #forms
- #performance










Showing Posts 1 to 10- Show Best Posts
- Show All (oldest first)
- Show All (newest first)
josevalim
Isn’t that call to
Jasondoing one additional encoding of the data? And if so, can you make sure that the encoded JSON is the same in both cases?cevado
js snippet and elixir snippet doesn’t do the same thing, you need to pass body to
JSON.stringifyfor the js snippet to be the same, something like:edit: removed the result because i didn’t run the code here.
EinerZG
Hello valid @josevalim, Yes, they are the same. I don’t know if it’s because with Elixir the result of
Jason.encode!(“hello”)is"\"hello\""and with JS it’s just“hello”.tcoopman
What? Jason.encode! doing translations? That seems not correct. Are you sure it’s not something else doing that?
But that will of course return a different hash.
EinerZG
Sorry, it was a typo.
tcoopman
Anyway, same issue: “"hello"” is not the same as “hello, so it can’t be the same hash.
As stated above, make sure you’re doing the same encodings in both languages
dimitarvp
Show us the exact value of
bodyin both codebases and make VERY sure they are both"hello"and don’t have double-double quotes in Elixir.benwilson512
A very important thing to keep in mind is JSON key order. Neither the JSON spec nor the Elixir maps you generally encode to JSON have any guaranteed key order, so when you write it out to a string you may get different actual strings before the encoding. That may not matter for you use case but it’s a common issue if you expect strict equality with larger or more complex JSON strings.
derek-zhou
If you remove the
Jason.encode!()then it will match:EinerZG
Yes, thank you, yesterday I was able to identify that this is the problem. When getting the body it is changing the odern of the keys. Actually the string transformation that the
Jason.encode!/1does does not affect the hash generation. Thanks for the help.