0

会社の iPad 用バックオフィスの開発を依頼されました。ログイン画面を開発しているときに、認証プロセスで問題が発生しました。

パスワードはソルトで連結され、SHA-256 を使用してハッシュされ、データベースに保存されます。バックオフィスは Flash ベースで、as3cryptoライブラリを使用してパスワードとソルトをハッシュします。私の問題は、現在の実装では入力と出力の両方に Base64 を使用していることです。

このサイトでは、これがどのように行われるかを示しています。Hash を選択し、入力と出力の両方の形式で Base64 を選択するだけです。これまでのところ、私のすべての試みは、このサイト (およびバックオフィス コード) が私に与えたものとは異なる結果をもたらしました。

理論的には比較的単純なはずだと思いますが:

  1. パス + ソルトを Base64 でエンコードする
  2. SHA-256 を使用してハッシュする
  3. Base64 で結果を再度エンコードします

これまでのところ、私はこれを行うことができず、正直言ってかなり頭が痛いです。私のコードは生きた迷路になりつつあります。明日にはやり直さなければならないと思います。

何か案は?乾杯と前もって感謝します

PS: ちなみに、ハッシュ化されたパスワードを生成する Backoffice の Flash コードは次のとおりです。

var currentResult:ByteArray;
var hash:IHash = Crypto.getHash('sha256');
var data:ByteArray = Base64.decodeToByteArray(str + vatel);
currentResult = hash.hash(data);
return Base64.encodeByteArray(currentResult).toString();
4

1 に答える 1

1

バックオフィスコードはしません

  1. パス + ソルトを Base64 でエンコードする
  2. SHA-256 を使用してハッシュする
  3. Base64 で結果を再度エンコードします

(あなたが上に書いたように)

代わりに、それが行うことは

  1. pass+salt 文字列をバイト配列に Base64 デコードする
  2. SHA-256 を使用してバイト配列をハッシュする
  3. Base64 でバイト配列をエンコードし、文字列を返します

上記の手順 1 のとおり、入力文字列がどのような文字エンコーディングを使用しているかは不明です。両方のシステムが入力文字列に同じエンコーディングを使用していることを確認する必要があります! この場合、UTF8、UTF16-LE、または UTF16-BE は大きな違いをもたらします。

iOS 側で使用する正しい文字エンコーディングを見つけることから始めます。

ああ、Matt Gallagher は、iOS で使用するハッシュの使いやすいラッパー クラスHashValue.mを作成しました。私はそれを使用して、良い結果を得ました。

于 2011-07-06T09:19:23.013 に答える