質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.80%

パスワードのHash化についてVB6からVB.netへの移行

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 922

help_

score 16

現状advapi.dllにて下記のように宣言しながらhashを行っています。

Private Declare Function CryptAcquireContext Lib "advapi32.dll" Alias "CryptAcquireContextA" _
                            (ByRef phProv As Long, ByVal pszContainer As String, ByVal pszProvider As String, _
                             ByVal dwProvType As Long, ByVal dwFlags As Long) As Long

今回VB.netへと移行するにあたって既存ユーザーのhashの値を保ったまま移行を行おうと考えています。
vb.net及びWindowsServer2016には該当のDLLがなく、
hashの実装は下記変数を利用して行っています。

        'ハッシュ用
        Dim hashSHA512 As New System.Security.Cryptography.SHA512CryptoServiceProvider

ですが同じ値にすることが出来ません。
該当dllに依存せず全く同じ値のロジックを作成することは可能でしょうか。
どうぞよろしくお願いいたします。

旧VB6ソースはこのページを参考に作られています。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • help_

    2019/04/03 15:00

    CryptAcquireContextの内部で何をやっているか再現できずに同じ結果にならないのかな、と考えています。
    何故同様の結果にならないのか、調査を進めています。

    キャンセル

  • macof

    2019/04/03 15:12

    失礼いたしました。CryptAquireContextを直接利用されているということですか。
    パスワードという事と参照先のページの話から、CreateSHA512HashString関数と同等の実装をして利用されているのかと思い込んでおりました。
    それでは私の話はお役に立ちそうにありませんね。

    キャンセル

  • help_

    2019/04/03 18:44

    大変助かりました、コード解読に誤りに気が付くことが出来ました。ありがとうございました。

    キャンセル

回答 2

checkベストアンサー

+2

advapi32.dll は VB6 のファイルではなくWindowsのシステムファイルです。
Windows\System32 にあると思います。
これは32bit専用なので、プラットフォームがx86でないと使えません。
おそらく、AnyCPUかx64になっているからでしょう。

-- 追記 --
CryptoAPITransform Class
が近そうですが、如何でしょう?

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/03 11:17

    WindowsServer2016のSystem32にはdllすらないです…。
    32bitファイルを利用する(DllImport)する手順については確認済みですが、
    サーバー環境になく参照できないことが問題になってしまっています…。

    キャンセル

  • 2019/04/03 11:25

    WindowsServer2016 見落としてました。
    ちょっと探してみます。

    キャンセル

  • 2019/04/03 15:01

    追記ありがとうございます。
    該当のクラスを利用してVB.netでは実装を行っております。
    がadvapi32.dllを利用しているVB6のソースの結果と解離があり、データの移行が難しいのでは、との声が上がっています。

    キャンセル

  • 2019/04/03 18:45

    調べていただきありがとうございました。
    既に該当のクラスを利用して実装を行っていましたが、その他のロジック部分に差異がありました。
    申し訳ありません。助かりました。

    キャンセル

+1

advapi32.dllを使わず
Dim hashSHA512 As New System.Security.Cryptography.SHA512CryptoServiceProvider
を使うことで解決しました。
問題点は
現状のソースはhash化した最終系を16進数文字列で出力していたこと
新しいものは文字列として出力していた為、実装部分に相違がありました。

ソースを読み込めば気が付けるものでした。
限られた情報しか提示できず申し訳ありませんでした。
ご回答してくださった皆様ありがとうございました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.80%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る