問題タブ [capicom]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
.net - データのAES暗号化に使用される初期化ベクトルCAPICOMを見つけるにはどうすればよいですか?
CAPICOMを介してデータを暗号化し、データベースに保存するClassicASPで記述されたアプリケーションがあります。暗号化コードは次のようになります(クラシックASP、VB。簡潔にするために少し簡略化)。
これで、このデータを読み取って復号化する必要がある.NETアプリケーションができました。クラスを使用する前に、.NETでAES互換の暗号化/復号化を実行しましたRijndaelManaged
。同じ方法を使用して、このデータを復号化できることを望んでいます。ただし、これをCAPICOMの暗号化されたデータで機能させる方法がわかりません。これは、をRijndaelManaged
呼び出すときにキーと初期化ベクトルを渡す必要がありRijndaelManaged.CreateEncryptor
、CAPICOMは初期化ベクトルを受け取らないためです。CAPICOMは初期化ベクトルを使用している必要がありますが、公開していないと思います。どうすればそのベクトルを見つけることができますか?
c# - リモートWindowsサーバー上の証明書の秘密鍵のファイル名を判別することは可能ですか?
リモートのWindows(2k3 / 2k8)マシンに保存されている証明書の秘密鍵のファイル名を特定しようとしていますが、問題が発生しています。また、私はMicrosoftのCryptAPIにあまり詳しくないので、あなたが提供できる助けを探しています。
この演習の目的は、特定の基準を満たす秘密鍵がリモートコンピューターにインストールされている証明書を見つけ、それらの秘密鍵ファイルに正しい権限が割り当てられていることを確認することです。フォルダレベルで権限を割り当てることはできますが、(明らかな理由で)必要な場合にのみ秘密鍵ファイルレベルで権限を割り当てることをお勧めします。
シナリオは次のとおりです。管理者のような権限を持つサービスアカウントが証明書ストアにアクセスしていると仮定します。
p / invokeを使用してC#から次の呼び出しを使用して、リモート証明書ストアを取得します。
[DllImport( "CRYPT32"、EntryPoint = "CertOpenStore"、CharSet = CharSet.Unicode、SetLastError = true)] public static extern IntPtr CertOpenStore(int storeProvider、int encodingType、int hcryptProv、int flags、string pvPara);
IntPtr storeHandle = CertOpenStore(CERT_STORE_PROV_SYSTEM、0、0、CERT_SYSTEM_STORE_LOCAL_MACHINE、string.Format(@ "\ {0} {1}"、serverName、name));
次に、CertEnumCertificatesInStoreを使用して、評価する証明書を取得します。
[DllImport( "CRYPT32"、EntryPoint = "CertEnumCertificatesInStore"、CharSet = CharSet.Unicode、SetLastError = true)] public static extern IntPtr CertEnumCertificatesInStore(IntPtr storeProvider、IntPtr prevCertContext); IntPtr certCtx = IntPtr.Zero; certCtx = CertEnumCertificatesInStore(storeHandle、certCtx);
証明書が私の基準に一致する場合、次のようにCertEnumCertificatesInStore呼び出しから返されたIntPtrからX509Certificate2インスタンスを作成します。
X509Certificate2 current = new X509Certificate2(certCtx);
興味のある証明書のX509Certificate2インスタンスを取得したら、 CryptAcquireCertificatePrivateKeyを呼び出して、秘密鍵プロバイダーを取得します。
[DllImport( "crypt32"、CharSet = CharSet.Unicode、SetLastError = true)] internal extern static bool CryptAcquireCertificatePrivateKey(IntPtr pCert、uint dwFlags、IntPtr pvReserved、ref IntPtr phCryptProv、ref int pdwKeySpec、
//certはX509Certificate2です
CryptAcquireCertificatePrivateKey(cert.Handle、0、IntPtr.Zero、ref hProvider、ref _keyNumber、ref freeProvider);
秘密鍵ファイル名を取得するために、hProviderから次のようなpDataとして一意のコンテナ名を要求しようとします。
[DllImport( "advapi32"、CharSet = CharSet.Unicode、SetLastError = true)] internal extern static bool CryptGetProvParam(IntPtr hCryptProv、CryptGetProvParamType dwParam、IntPtr pvData、ref int pcbData、uint dwFlags);
IntPtr pData = IntPtr.Zero; CryptGetProvParam(hProvider、PP_UNIQUE_CONTAINER、pData、ref cbBytes、0));
これまでのところ、上記のすべての手順はローカルでうまく機能します(servername ==ローカルマシン名)。ただし、リモートコンピューターのローカルマシンの証明書ストアに格納されている証明書に対して返される一意のコンテナー名(秘密鍵ファイル名)は、次の場所に表示されている実際の秘密鍵ファイル名としては表示されません。
w2k3:\ Documents and Settings \ All Users \ Application Data \ Microsoft \ Crypto \ RSA \ MachineKeys
ws08:\ ProgramData \ Microsoft \ Crypto \ RSA \ MachineKeys
たとえば、上記の手順をリモートマシンで直接実行すると、秘密鍵ファイル名AAAAAAA-111111が取得されますが、リモートで実行すると、秘密鍵BBBBBBBB-2222222が取得されます。また、リモート証明書をローカルにインストールし、ローカルマシンに対して手順を実行すると、同じ秘密鍵名BBBBBBBB-2222222を取得します。
CryptAcquireCertificatePrivateKeyを呼び出すステップ4で、警告が欠落している可能性があります。この呼び出しは、ローカルマシンのIDに依存して、秘密鍵BLOBを格納するために使用される一意のコンテナの名前を生成している可能性があります。
更新しました
さらに調査した結果、秘密鍵コンテナのファイル名がここでどのように作成されるかを正確に詳しく説明しているブログを見つけました。
CryptAcquireCertificatePrivateKeyを使用する代わりに、CertGetCertificateContextPropertyによって取得されたコンテナーの名前を取得したら、そのブログで説明されているメソッドを使用して、任意のマシンで秘密鍵コンテナー名を取得できます。ここのコードは、秘密鍵コンテナ名を取得して秘密鍵ファイル名を生成する方法を示しています。*免責事項-これは変更される可能性があり、完全ではない可能性もあると確信していますが、将来誰かに役立つ場合に備えて投稿しています*
構造体とP/Invoke:
ms-access - ミリ秒アクセスでのハッシュ
ms アクセス (できれば MD5 または SHA-1) でパスワードをハッシュしようとしています。Windows XP で学校でうまく機能した Capicom を見つけました。しかし、自宅では Access が認識したくないようです。外部ライブラリの追加を伴わない、XP と Windows 7 の両方で動作する代替手段はありますか?
また、外部ライブラリが必要な場合、これをデータベースの VB コードに追加するにはどうすればよいですか。ありがとう。
e: .dll ファイルなど、インストールする必要があるものはすべて、学校で使用できないため、問題外です (問題は、自宅や学校で機能するものを見つけて、効果的に取り組むことができるようにすることです)私のプロジェクト)
php - PHP でブラウザからデジタル署名を確認する方法
ブラウザでテキスト文字列に署名する Javascript があります。Internet Explorer では CAPICOM を使用し、Mozilla ブラウザでは window.crypto を使用します。署名プロセスの後、BASE64 でエンコードされた署名を受け取ります。
HTTPS を使用して、署名とテキスト文字列を PHP アプリケーションで Web サーバーにアップロードします。SSL (HTTPS) からユーザーの証明書を受け取ります。この証明書から、ユーザーの公開鍵を抽出できます。
ここで、署名されたテキスト文字列とユーザーの証明書および公開鍵に対する署名を検証したいと思います。openssl_verify PHP 関数を試してみましたが、成功しませんでした。
私はいつもエラーを受け取ります:
エラー:0408D077:RSA ルーチン:FIPS_RSA_VERIFY:署名の長さが間違っています
- 私は証明書を持っています。問題ありません。
- 証明書から公開鍵を抽出しましたが、これも検証済みで問題ありません。
- 署名があります (BASE64 デコード済み)。
残念ながら、署名を確認できませんか? 現時点ではローカル ネットワークのみにあるため、デモやサンプルを提供することはできません。
java - Capicom SHA1 ハッシュが Java で異なる方法で計算される
一部の を暗号化するためにロジックを使用してCAPICOM
アセンブリを使用していますが、これはうまく機能しますが、 を使用して同じものを複製しようとすると問題が発生します。VBS
text
Java
これは私のVBSコードです:
上記のコードをデバッグすると、次の結果が得られます。
Hash
オブジェクトの値は次のとおりです。
そのままの最終結果encryptedStr
:
それで、Java
私は同じことを複製しようとしていますが、これは次の方法で実行できると思います...
or
SHA1
のハッシュを取得します(コードにはa を表すオブジェクトがあるため)。String
InputStream
VBS
stm
Stream
いくつかの
HexToBinary
メソッドを使用します (デフォルトではこのメソッドは に存在しないため、これを実装しますJava
)。ハッシュから
BASE64Encoder
のバイナリに使用します。String
SHA1
最後に、
Left
メソッド fromorg.apache.commons.lang.StringUtils
(VBS
コードの複製) を使用してから、 として出力encryptedStr
しbase64
String
ます。
これは、少なくともハッシュを生成するために Java でこれまでに試したことですSHA1
(次の場合と同じであると想定されますhash.Value
) VBS
。
上記のコードは次を出力します。
問題:
String
どちらの場合も暗号化するために同じものを使用しています(VBS
とJava
)。VBS
コードを実行すると、次SHA1
のハッシュ値を取得しCAPICOM
ます。636D0172D7FAC85AF9DB57FAE6C7D98B17DE5159
Java
コードを実行すると、次SHA1
のハッシュ値が得られます。825CA9AF2795F3CCD41EC3B756CC7514E490842F
ハッシュが同じでない
base64
String
場合encryptedStr
と同じになることはありません。SHA1
私の質問:
私が間違っていることとSHA1
、両方のケースでハッシュが異なって計算されるのはなぜですか。誰かが何が起こっているのか、またはこれを実装して同じ結果を得る正しい方法は何かを説明できますかJava
?
知っておくと、少し役立つこのリンクが見つかりました。同じものを得ることができますが、hash
私の場合の問題は解決しません。
http://us.generation-nt.com/answer/capicom-hasheddata-java-binary-files-help-44910362.html?page=2
誰かがコードをインストールCAPICOM
してテストしたい場合VBS
は、次のことができます。
- 「capicom.dll」を「C:\WINDOWS\system32」にコピーします
- スタート/プログラム/アクセサリ/コマンド プロンプトをクリックします。
- 「C:」と入力
- 「cd C:\WINDOWS\system32」と入力します
- 「regsvr32.exe capicom.dll」と入力します
- 「OK」ボタンをクリックします。
- 「出口」と入力
そして、次のcapicom.dll
場所から自分自身を直接ダウンロードしますMicrosoft
。
.net - ファイルがデジタル署名されているかどうかを確認する方法 vb.net
私は vb.net プロジェクトで作業しており、特定のファイルがデジタル署名されているかどうかを確認したいと考えています。CAPICOM は Google で検索した後に生まれた API ですが、特定のファイルがデジタル署名されているかどうかにかかわらず、vb.net で CAPICOM を使用して TRUE/FALSE を取得する方法が正確にはわかりません..
今、私はこれに関して助けを得るためにここにいます。私の悪い英語でごめんなさい。
ありがとうございます。それでは、お元気で、
web-services - Delphi CGI WebService - デジタル証明書
私は Delphi 7 CGI webService (Windows XP では、しかし Windows 7 はテーブルから外れていません) アプリケーションを持っています。XML ドキュメントに署名するためにデジタル証明書にアクセスする必要があります。
CApicom_TLB をインポートし、証明書のインスタンス化に成功しましたが、いくつか問題があります...
私のアプリを実行するApacheサーバーは、証明書をインストールした別のWindowsユーザーで実行します.CAPICOM_CURRENT_USER_STOREフラグを使用してクエリを実行すると、証明書ストアは空のままになります。ローカル マシンに A1 証明書 (秘密鍵を含む Pfx) をインストールし (MMC コンソール経由で、新しいスナップインを追加)、CAPICOM_LOCAL_MACHINE_STORE フラグを使用して証明書ストアにアクセスすることで、回避しました。証明書を取得しました (シリアル番号、フレンドリ名、有効期限を読み取ることができます) が、ドキュメントに署名しようとすると、「キー ペアが存在しません」というエラーが表示されます。
同じ PFx を使用して、通常の APP (Not-cgi) で同じコードが機能します (XML への署名に成功)。
証明書を取得するために使用するコード:
次に、CertStoreMem を使用して、次の署名を使用します
エラー (キー ペア) は、コードの最後の行にあります。
2 つの方法があります: CGI アプリケーションに、それをインストールしたのと同じユーザーの証明書を読み込ませる (非 CGI で動作するコード) または、ローカル マシンにインストールされた証明書を使用してこの回避策をキー エラーなしで動作させる。
誰かが助けてくれれば大歓迎です
c# - Capicom を使用した Web サービス用の Windows ストア アプリでのデータの署名
私はWindowsストアアプリに取り組んでいます。したがって、古い ASMX Web サービスを使用する必要があります。このサービスは、Capicom ライブラリを使用してデータの署名を解除します。
問題は、Windows ストア アプリで Capicom を使用できないことです。
Capicom を使用しない Web サービスで署名を解除できるように、Capicom を使用せずに Store アプリ内のデータに署名する方法はありますか?
よろしくお願いします。
c++ - QtでCAPICOM?
CAPICOM/IE6 とデジタル署名の秘密鍵を保持する USB トークンに基づく厄介な暗号化プラットフォームで動作するはずの Qt/C++ でプログラムを作成する必要があります。システムのユーザーは、次の手順に従ってログインする必要があります。
- システムに偽のルート CA をインストールする
- カミコンをインストール
- トークンを差し込む
- Internet Explorer を開き (いいえ、他のブラウザーは動作しません)、URL を入力し、ユーザー名とパスワードを入力して、[ログイン] をクリックします。
(可能であれば) CAPICOM を削除し、システムを可能な限りクロスプラットフォームにすることを計画しています。次の 2 つのシナリオが考えられます。
- CAPICOM を削除し、最新のクロスプラットフォーム ツールを使用して置き換えます
- どういうわけか、CAPICOM を使用するように Qt コードを作成し、Web ブラウザーの役割を削除します。
CAPICOM がどのように機能するか (特に署名の正確な内容) と、USB トークン ( ePass 3003 ) への接続方法に関するヘルプは役に立ちます。