3

私は CAPICOM ライブラリを使用していますが、Android と iOS では利用できません。私の知る限り、CAPICOM 署名付きメッセージは PKCS#7 形式です。OpenSSL を使用して、CAPICOM のように署名付きメッセージを作成したいと考えています。

私が使用したOpenSSLコマンド:

iconv -f utf-8 -t utf-16le data.bin > data-utf16le.bin

openssl smime -sign -binary -noattr -in data-utf16le.bin -signer demo.pem -inkey demo.key -out sign.txt -outform PEM

次に、このサンプルとして CAPICOM で検証しました: http://www.codeproject.com/Articles/9691/Using-CAPICOM-in-NET-for-Digital-Signatures-with-A

検証方法は次のとおりです。

public bool VerifyDetachedSignature(string plaintextMessage, string signedContent, Encoding encodingType) 
{
    try
    {
        this._clearText = plaintextMessage;
        this._signedContent = signedContent;
        CAPICOM.SignedData signedData = new CAPICOM.SignedDataClass();
        CAPICOM.Utilities u = new CAPICOM.UtilitiesClass();
        IntPtr _content = u.ByteArrayToBinaryString(encodingType.GetBytes(plaintextMessage));
                signedData.set_Content(_content);
        int len = _signedContent.Length;
        signedData.Verify(_signedContent,true, CAPICOM.CAPICOM_SIGNED_DATA_VERIFY_FLAG.CAPICOM_VERIFY_SIGNATURE_ONLY);
        SignerCert=null;
        CAPICOM.Signer s = (CAPICOM.Signer) signedData.Signers[1];
        SignerCert = (CAPICOM.Certificate)s.Certificate;                
        return true;                    
    }
    catch(COMException e)
    {
        return false;
    }
}

encodingTypeですSystem.Text.Encoding.UTF8

結果は無効です。

CAPICOM で再度署名したところ、この場合の署名済みメッセージの長さは、OpenSSL によって作成された署名済みメッセージの長さよりも長いことがわかりました。

私が理解するのを手伝ってください!

4

0 に答える 0