ASP.NET openssl_sign a openssl_verify

ASP.NET openssl_sign a openssl_verify

Nedávno som dostal za úlohu implementovať online platobnú metódu GP webpay (www.gpe.cz). Túto metódu používa ČSOB a Volksbank banka. Jej súčasťou je podpisovanie SHA1 hashu reťazca pomocou RSA algoritmu.

V návode na implementáciu sa píše:

Calculating the electronic signature
Inputs: Data message (message), Private RSA key (with a K length module)
Outputs: Electronic signature (BASE64 encoded), approximate length K*1.5

The electronic signature is calculated as follows:

  1. The value of the function SHA-1 is derived from the message.
  2. The hash is encrypted into the input value for the RSA signature, using the EMSA-PKCS1-v1_5-ENCODE algorithm as described in paragraph 9.2.1.The following is the encryption: 01 | FF* | 00 | 30 21 30 09 06 05 2B 0E 03 02 1A 05 00 04 14 | hash where FF characters repeat as many times as necessary for the total length of the string to be one octet shorter than the key modulus. The character | is used for the strings concatenation.
  3. The RSA signature is calculated using the output value from b), as described in 8.1.1 RSASSA-PKCS1-V1_5-SIGN
  4. The output from c) is encoded using BASE64.

Na toto podpisovanie existuje v PHP jednoriadková funkcia openssl_sign(). V .NET ale žiadna takáto funkcia neexistuje. Nikde som ani nenašiel ako na to. Problém tiež bol, ako správne načitať vygenerovaný a zaheslovaný certifikát a ako z neho získať privátny kľúč.

PHP na tento účel využíva openssl knižnicu (http://www.openssl.org), pre ktorú našťastie existuje .NET port. Po preskúmaní zdrojového kódu PHP a niekoľkých hodinách trápenia sa s knižnicou ManagedOpenSsl sa mi konečne podarilo správne podpisovať a verifikovať reťazec. Prikladám funkčné demo aj so zdrojovými kódmi.

Demo openssl_sign, a Stiahite si zdrojový kód (.zip 1,4 MB).

Skôr ako začneme: nahliadnite do spracovania vašich osobných údajov

Súbory cookies používame najmä na anonymnú analýzu návštevnosti a vylepšovanie našich web stránok. Ak si nastavíte blokovanie zápisu cookies do vášho prehliadača, je možné, že web sa spomalí a niektoré jeho časti nemusia fungovať úplne korektne. Viac info k spracúvaniu cookies.