none
ハッシュ文字列について問題があります。 RRS feed

  • 質問

  • お世話になっております。

    私はVBA7.0で応用を開発しています。応用を開発終わったら、Windows7の上Access2010でチェックして、ログイン画面はログイン機能が大丈夫ですが、Windows10の上Access2016でチェックする時、ハッシュ文字列を作成できません。ずっと空文字「””」戻り値を貰いました。

    デバッグをやってみました。理由はhProv引数の値が「-603304048」およびhHash引数の値が0ですので、ハッシュ文字列を作成できません。しかし、Longデータ型の代わりにLongPtrデータ型を使った後、hProv引数の値が「2657981455760^」およびhHash引数の値が「2657983193808^」ですので、ハッシュ文字列を作成できました。

    どうして、Windows7の上Access2010でこのエラーが発生しませんが、Windows10の上Access2016でエラーが発生しましたか?

    私に根本原因を教えていただけませんでしょうか?

    現在、CSPでハッシュ文字列を作成しています。それに、「CryptAcquireContext」関数および「CryptCreateHash」関数を使っています。

    宜しくお願い致します。


    2017年11月30日 9:39

すべての返信

  • 恐らくですが、Windows7は32bitでWindows10は64bitだとかってありませんか?

    OSの違いというよりも、32bitと64bitのAccessの違いかもしれません。

    2017年11月30日 10:39
  • 最初、Win7‐64ビットの上Access2010およびWin10‐64ビットの上Access2016、次はWin10‐64ビットの上Access2010およびWin10‐64ビットの上Access2016。両方結果は同じです。

    それに、Windows7で実施したのは32bitではありません。
    (OSもACCESSも64bitです)
    Windows7(64bit)では、ACCESS2010とACCESS2016の両方で成功します。

    おかしいですよね。



    2017年12月1日 1:12
  • どのような文字列をハッシュしているのかわかりませんが、ハッシュ値は文字のエンコードによって変わってきますので、エンコードを意識する必要があります。
    ただ、今回は空となり作成されないということですから、エンコードは関係ないかもしれませんね。
    一応、ご確認下さい。


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    2017年12月1日 1:23
    モデレータ
  • 私に教えありがとうございます。

    ログイン機能を開発途中でこのチュートリアルによって、ハッシュ文字列を作成します。

    参照リング:

    http://khoiriyyah.blogspot.jp/2012/06/vb6-hash-class-md5-sha-1-sha-256-sha.html

    この関数「CreateHash」でハッシュ文字列を作成します。

    しかし、この関数はエンコードを使いません。

    もし、 LongPtrデータ型hProv引数およびLongPtrデータ型でhHashはハッシュ文字列を作成できます。

    Win7‐64ビットの上Access2010およびWin10‐64ビットの上Access2016、次はWin10‐64ビットの上Access2010およびWin10‐64ビットの上Access2016が成功です。

    しかし、根本原因が全然分かりません。

    どうもありがとうございます。


    2017年12月1日 2:18
  • 他の方もご指摘されておりますが、問題の発生した Access が 64bit の可能性があると思います。(OS が 64bit かどうかではありません)

    以下のサイトに Office が 64bit かどうかを確認する方法が載っておりました。
    使用している Office のバージョンを確認する方法

    ちなみに私の環境では Access 2016 の 64 bit をインストールしているのでバージョン情報は下記のようになっておりました。

    64bit の Office の VBA でハンドルやポインターを扱うときには、Long ではなく LongPtr を使う必要があります。もし Windows 7 (64bit) の 64bit Office でハンドルやポインターを扱うときに Long でうまくいっていたとすると、たまたま 64bit のアドレス値が 32bit の範囲に納まっていただけかもしれません。(Windows 7 64bit では、Windows 10 64bit に比べて 32bit の範囲に納まるアドレス値を生成する確率が高いのかもしれません←未検証)

    参考サイト: Office 2010 の 32 ビット バージョンと 64 ビット バージョンとの互換性

    2017年12月1日 4:32
  • 凄いですね。

    私に教えありがとうございます。

    その理由がよく分かりました。

    どうもありがとうございます。

    2017年12月1日 6:08
  • 申し訳ありませんが、再度、質問させて下さい。
    現在、ハッシュ文字列を作成することについての調査を行っております。

    下記の参考リンクには、「Important  This API is deprecated. New and existing software should start using Cryptography Next Generation APIs. Microsoft may remove this API in future releases.」というMicrosoftの警告が記載されております。

    将来的に「CSP」の代わりに「CNG」暗号化テクノロジーに変更するとの記載がありますが、
    Windows10.x上で実行した場合、「CSP」でハッシュ文字列を作成することは可能ですか?

    推奨されていない、削除する可能性があるとの事なので、このAPIを使用しない方が良いでしょうか?

    お手数をおかけして申し訳ありませんが、ご教示頂けると助かります。

    参考サイト:
    https://msdn.microsoft.com/ja-jp/library/windows/desktop/aa380268




    2017年12月1日 6:33