VB2010にて、住基カードを使い、XMLに電子署名をつけるプログラムを作成しようとしているのですが、最初のアクセスの段階でうまくいきません。
住基カードとのやりとりはCryptoAPIを使用しています。仕様に関しては
http://www.lascom.or.jp/jinfo/spec2.html 等を参考にしました。
概要にはC言語用インターフェースが提供されているとなっており、CSPが「JPKI利用者ソフト」をインストールすると登録されるので、最初C言語にてサンプルを作ってみました。
http://eternalwindows.jp/security/scard/scard15.html
こちらを参考に、鍵ペアを作るところまでを作成しました。
プロバイダ名は「JPKI Crypto Service Provider」とし、szContainerNameはNULLとして実行すると、PINコードの入力ウィンドウが表示され、コードを入力すると鍵ペアの作成に成功します。
当方がC言語が苦手なため、このコードをVB2010に書き換えようと試行錯誤しているのですが、最初の「CryptAcquireContext」にてエラー「0x80090019」となってしまいます。
以下がVBのコードです。文字数制限のため、タブを削除してあり、読みにくくてすみません。
<フォーム内>
Public Class Form1
Private hContext As UInteger
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim sContainer As String
Dim sProvider As String
Dim lHCryptProv As Long
Dim lResult As Long
sContainer = vbNullChar
sProvider = "JPKI Crypto Service Provider" & vbNullChar
If CryptAcquireContext(lHCryptProv, vbNullChar, sProvider, PROV_RSA_FULL, 0) = 0 Then
If CryptAcquireContext(lHCryptProv, vbNullChar, sProvider, PROV_RSA_FULL, CRYPT_NEWKEYSET) = 0 Then
TextBox1.Text = GetLastError
End If
End If
If lHCryptProv <> 0 Then
lResult = CryptReleaseContext(lHCryptProv, 0)
Else
TextBox1.Text = GetLastError
End If
End Sub
End Class
<モジュール内>
Module Module1
Public Const CRYPT_VERIFYCONTEXT As Long = &HF0000000
Public Const CRYPT_NEWKEYSET As Long = &HF0000008
Public Const PROV_RSA_FULL As Long = 1
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
Public Declare Function CryptReleaseContext Lib "advapi32.dll" _
(ByVal hProv As Long, ByVal dwFlags As Long) As Long
Public Declare Function GetLastError Lib "kernel32.dll" () As Long
End Module
VB2010にて、住基カードを使い、XMLに電子署名をつけるプログラムを作成しようとしているのですが、最初のアクセスの段階でうまくいきません。
住基カードとのやりとりはCryptoAPIを使用しています。仕様に関しては
http://www.lascom.or.jp/jinfo/spec2.html 等を参考にしました。
概要にはC言語用インターフェースが提供されているとなっており、CSPが「JPKI利用者ソフト」をインストールすると登録されるので、最初C言語にてサンプルを作ってみました。
http://eternalwindows.jp/security/scard/scard15.html
こちらを参考に、鍵ペアを作るところまでを作成しました。
プロバイダ名は「JPKI Crypto Service Provider」とし、szContainerNameはNULLとして実行すると、PINコードの入力ウィンドウが表示され、コードを入力すると鍵ペアの作成に成功します。
当方がC言語が苦手なため、このコードをVB2010に書き換えようと試行錯誤しているのですが、最初の「CryptAcquireContext」にてエラー「0x80090019」となってしまいます。
以下がVBのコードです。文字数制限のため、タブを削除してあり、読みにくくてすみません。
<フォーム内>
Public Class Form1
Private hContext As UInteger
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim sContainer As String
Dim sProvider As String
Dim lHCryptProv As Long
Dim lResult As Long
sContainer = vbNullChar
sProvider = "JPKI Crypto Service Provider" & vbNullChar
If CryptAcquireContext(lHCryptProv, vbNullChar, sProvider, PROV_RSA_FULL, 0) = 0 Then
If CryptAcquireContext(lHCryptProv, vbNullChar, sProvider, PROV_RSA_FULL, CRYPT_NEWKEYSET) = 0 Then
TextBox1.Text = GetLastError
End If
End If
If lHCryptProv <> 0 Then
lResult = CryptReleaseContext(lHCryptProv, 0)
Else
TextBox1.Text = GetLastError
End If
End Sub
End Class
<モジュール内>
Module Module1
Public Const CRYPT_VERIFYCONTEXT As Long = &HF0000000
Public Const CRYPT_NEWKEYSET As Long = &HF0000008
Public Const PROV_RSA_FULL As Long = 1
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
Public Declare Function CryptReleaseContext Lib "advapi32.dll" _
(ByVal hProv As Long, ByVal dwFlags As Long) As Long
Public Declare Function GetLastError Lib "kernel32.dll" () As Long
End Module
bitmapクラスをiconクラスに変換する方法
bitmapクラスをiconクラスに変換する方法
今、画像変換ソフトをVisual Basic 2010 Express Editionで作っているのですがbitmapクラスをiconクラスに変換する方法が分かりません。
GetHiconを使って変換する方法を試してみたのですがアイコンが16色になってしまい画像が変わってしまいます。
変換ソフトで使用するBitmapをIconに変換する関数を作ったのですが変換するところで止まっています。
Public Function convert_to_ico(ByVal image As Bitmap) As Icon
Dim loadimage As Bitmap = New Bitmap(16, 16, PixelFormat.Format24bppRgb)
Dim draw As Graphics = Graphics.FromImage(loadimage)
draw.DrawImage(image, 0, 0)
Dim returnico As Icon
Return returnico
End Function
申し訳ありませんが、宜しくお願いします。
bitmapクラスをiconクラスに変換する方法
bitmapクラスをiconクラスに変換する方法
今、画像変換ソフトをVisual Basic 2010 Express Editionで作っているのですがbitmapクラスをiconクラスに変換する方法が分かりません。
GetHiconを使って変換する方法を試してみたのですがアイコンが16色になってしまい画像が変わってしまいます。
変換ソフトで使用するBitmapをIconに変換する関数を作ったのですが変換するところで止まっています。
Public Function convert_to_ico(ByVal image As Bitmap) As Icon
Dim loadimage As Bitmap = New Bitmap(16, 16, PixelFormat.Format24bppRgb)
Dim draw As Graphics = Graphics.FromImage(loadimage)
draw.DrawImage(image, 0, 0)
Dim returnico As Icon
Return returnico
End Function
申し訳ありませんが、宜しくお願いします。