FSUtil.Hash calculates different SHA-1 hash for string?

You're probably hashing different representations of the string, e.g. UTF-16 vs UTF-8.

StringTools provides ways to convert between encodings.

Also, from the 12.9.1 release notes:

The Blob.CopyFrom method now lets you initialise a Blob from a string. By default the Blob will be set to the Unicode form of the string; if you pass "utf8" as the second parameter it will initialise the Blob with the utf8-encoded form of the string.