MD5による署名の作成が出来ない – プログラミング – Home

MD5による署名の作成が出来ない
 
通知
すべてクリア

[解決済] MD5による署名の作成が出来ない


chida
 chida
(@chida)
ゲスト
結合: 20年前
投稿: 8
Topic starter  

度々失礼します。
実ファイル名からMD5で変換されたファイル名を取得するプログラムを作りたかったので
すが、CryptAcquireContext、CryptCreateHash、CryptHashDataは戻り値にTRUEが帰って
きているため正常に終了していると思うのですがCryptSignHashのところでFALSEが帰って
きて変換後のファイル名が取得できません。
検索をして見たのですがこれとほぼ同じ使い方で正常のケースしか見つからず原因がよく
分かりません。ご教授のほどをよろしくお願いします。
開発環境はWin2003Server、VC++6.0SDKです。
ソースは以下のようになっています。よろしくお願いします。
--------------------------------------------------------------------------------
int chg_md5(char* hash_md5)
{
HCRYPTPROV hProv;
HCRYPTHASH hHash;
HCRYPTKEY hKey;
BOOL bResult;
char Buf[32+1];
char Signature[32+1];
DWORD SignLen;
int ret ;

hProv = 0 ;
hHash = 0 ;
hKey = 0 ;
SignLen = 32;
sprintf(Buf,%s,hash_md5);

ret = CryptAcquireContext( &hProv, NULL, NULL, PROV_RSA_FULL, 0 ) ;
if(ret != TRUE )
{
if(!CryptAcquireContext( &hProv, NULL
       , NULL, PROV_RSA_FULL, CRYPT_NEWKEYSET ))
{
return 1;
}
}

ret = CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash);
ret = CryptHashData(hHash, Buf, 32, 0);

ret = CryptSignHash(hHash, AT_SIGNATURE, NULL, 0, NULL, &SignLen);
ret = CryptSignHash(hHash, AT_SIGNATURE
            , NULL, 0, Signature, &SignLen);

ret = CryptGetUserKey(hProv, AT_SIGNATURE, &hKey);
bResult = CryptVerifySignature(hHash, Signature
            , SignLen, hKey, NULL, 0);

if(bResult){ ret = 0 ; }
else { ret = 1 ; }

CryptDestroyKey(hKey);
CryptDestroyHash(hHash);
CryptReleaseContext(hProv, 0);
return ret;
}
--------------------------------------------------------------------------------


引用未解決
トピックタグ
PATIO
(@patio)
Famed Member
結合: 5年前
投稿: 2660
 

せめてGetLastErrorの結果どんなエラーが出ているのか位は添えるべきだと思うのですが。


返信引用
PATIO
(@patio)
Famed Member
結合: 5年前
投稿: 2660
 

あと、

ret = CryptSignHash(hHash, AT_SIGNATURE, NULL, 0, Signature, &SignLen);

このときのSignLenは、Signatureのサイズを渡すようにとMSDNには書いてあるようです。
確認されましたか?


返信引用
chida
 chida
(@chida)
ゲスト
結合: 20年前
投稿: 8
Topic starter  

PATIOさんありがとうございます。
まずエラーNOですが、失念しておりました。
CryptSignHashの戻り値がNTE_BAD_KEYSET(鍵コンテナ生成は正常終了しているのに鍵コ
ンテナが存在していないと言われている?)でした。
SignLenについては調べてあったのですが修正漏れです。
修正して再実行してみましたが、エラーは同じものが帰ってきました。
この場合は署名の作成ではなく鍵の取得がおかしいのでしょうか?
以上です。よろしくお願いします。


返信引用
PATIO
(@patio)
Famed Member
結合: 5年前
投稿: 2660
 

キーペアの取得を単純に行った時に取得できますか?
もし出来ないのであれば、そのPCに使用するべきキーペアが存在しないと言う事では
ないかと思うのですが。
CryptSignHashを呼び出した直後のGetLastErrorがNTE_BAD_KEYSETと言う事であれば、
それが原因ではないかと思います。
キーペアの生成というのがどうやればいいのかと言うのは私もわかりませんけれど。


返信引用
chida
 chida
(@chida)
ゲスト
結合: 20年前
投稿: 8
Topic starter  

キーペア取得が出来なかったのでキー自体が存在しないようです。
また、自分のやりたいこと違うことをやっている可能性が出てきましたので出直して調べ
なおします。
PATIO様ありがとうございました。
解決は出来ていないですが、調査の時間がほしいので解決に変更しておきます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました