私たちには、UTF-16でエンコードされたパスワードのSHA1ハッシュをBase64 Encodedする必要がある通信プロトコルがあります。私たちは、与えられたJavaの、しかし私たちはLinuxで実行されているJavaScriptの、およびVisual Basicの例は、(RedHatの)linux ascii to utf-16(sha1とbase64)encode
提供されるテスト文字列:[email protected]
最終的な出力:私が試してみましたrBbBKqbJodT5awZal/CSCYF/sFo=
iconv_t conv = iconv_open("UTF-16LE","ASCII"); // open succeeds
char *from_string=strdup("[email protected]");
size_t from_length=strlen(from_string);
size_t to_length=from_length*3;
size_t original_to_length=to_length;
char *to_string=(char*)calloc(1,to_length);
int convert_return=iconv(conv,&from_string,&from_length,&to_string,&to_length);
// convert_return is 0 indicating success, to_length is 11, from_length is 0
to_stringのsha1およびbase64エンコーディングを実行し、長さが22
の出力結果:GCXe7HMDoq/NRqo1WWYJDDYZzP0=
to_stringに通じIループは私が出た場合:
function str2rstr_utf16le(input)
{
var output = "";
for(var i = 0; i < input.length; i++)
output += String.fromCharCode(input.charCodeAt(i) & 0xFF,
(input.charCodeAt(i) >>> 8) & 0xFF);
return output;
}
は、私が何をしないのです。ここで
for (int i=0; i<original_to_length-to_length; ++i) {
printf("to_string %d = %x",i,to_string[i]);
}
output:
to_string 0 = 0
to_string 1 = 0
to_string 2 = 0
to_string 3 = 0
to_string 4 = 0
to_string 5 = 0
to_string 6 = 0
to_string 7 = 0
to_string 8 = 0
to_string 9 = 0
to_string 10 = 0
to_string 11 = 0
to_string 12 = 0
to_string 13 = 0
to_string 14 = 21
to_string 15 = 0
to_string 16 = 0
to_string 17 = 0
to_string 18 = 4
to_string 19 = 7e
to_string 20 = 13
to_string 21 = e
はjavascriptを変換ですか?
ありがとうございました
正しいUTF-16を選んだことはありますか? –
私は11回ループしていることを考慮して、22行が表示されているのには非常に驚いています(original_to_length == 33、to_length == 22)。 – avakar
私のミスタイプは残念です.... to_lengthが11になり、その差は22 – PhilC