5

パスワードをエンコードする必要があるサードパーティのソリューションにログインするためのコードがいくつかあります。彼らは Java のサンプルを提供してくれましたが、C# (および後で PHP) で開発する必要もあります。

C# Windows アプリと Java Android アプリにコードがあり、同じ出力で、サイファー バイトを Base 64 でエンコードされた文字列に変換しようとする時点まではうまく機能しているようです。

Javaコードは次のとおりです。

enc = Base64.encodeBase64(ciphertext);
return enc.toString();

C# コードは次のとおりです。

return System.Convert.ToBase64String(cipherBytes);

Java アプリの暗号文バイトは、署名されていることを除いて C# アプリと同じであり、Java の base64 でエンコードされたバイトを ASCII 値に変換すると、表示されている文字列が得られることがわかります。 C# アプリですが、Java の enc.ToString() は同じ文字列を返しません。

より詳しい情報

ジャワ

ciphertext = 66, 67, -69, 24, -48, -23, 84, -5
encodeded64 = 81, 107, 79, 55, 71, 78, 68, 112, 86, 80, 115, 61
to string = [B@41771ea8

C#

cipherBytes = 66, 67, 187, 24, 208, 233, 84, 251
result = QkO7GNDpVPs=

助けてくれて本当にありがとうございます。(これは私の最初の投稿ですので、ルールを破っている場合はお気軽にお知らせください)

4

1 に答える 1

11

使用しているJavaコードはtoString()、バイト配列を呼び出しています。これにより、常に次の形式の文字列が得られます。[B@....

あなたが使用することができます:

return new String(enc, "ASCII");

...しかし、バイト配列をエンコードすると最初の文字列が返されるAPIを使用するように変更することをお勧めします。私はこのパブリックドメインの実装が好きです。

return Base64.encodeBytes(cipherText);
于 2013-03-11T11:21:58.010 に答える