* .PEM私钥主要文件ASN.1 PARSER [英] *.PEM PRIVATE KEY FILE ASN.1 PARSER

查看:276
本文介绍了* .PEM私钥主要文件ASN.1 PARSER的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


大家好。



有谁知道是否在VFP的代码中有ASN.1解析器?

我需要解析apple_private_key.pem文件。

我需要解析此文件,以便将CNG的BCrypt.dll的BCryptVerifySignature函数中的私钥用作参数。



  * 2使用来自outsi的.pem文件进行签名是测试prg de firm  
CLEAR
SET PROCEDURE TO BCryptSign.prg,BCryptHash.prg ADDITIVE
m.lpr13encoded = FILETOSTR " apple_private_key.pem" &安培;&安培;编码的base64二进制文件
m.lpr14decoded = STRCONV (m.lpr13encoded,14)&& ;已解码的base64二进制文件
STRTOFILE (m.lpr14decoded," apple_private_key_decoded.pem"

mn = ALINES (laPrKey,m.lpr13encoded)
m.lpr13encodedWithoutBeginAndEnd = SPACE (0)
FOR mi = 1 TO mn &安培;&安培;删除第一行和最后一行
IF m.i<> 1 AND m.i<> m.n
&& ?laPrKey [mi]
m.lpr13encodedWithoutBeginAndEnd = m.lpr13encodedWithoutBeginAndEnd + laPrKey [mi]
ENDIF
ENDFOR
&& ?m.lpr13encodedWithoutBeginAndEnd
STRTOFILE (m.lpr13encodedWithoutBeginAndEnd," apple_private_key_WithoutBeginAndEnd.pem"
m.lpr14decodedWithoutBeginAndEnd = STRCONV (m.lpr13encodedWithoutBeginAndEnd,14)
STRTOFILE (m.lpr14decodedWithoutBeginAndEnd," apple_private_key_decoded_WithoutBeginAndEnd.pem"
CLEAR
SET PROCEDURE TO BCryptSign.prg, BCryptHash.prg ADDITIVE
lStr = "Man" &安培;&安培; SHA1的结果必须是:8B70BB3A4D458CF297AB7B3A3B07B63B5CA07DE9
lStrHashBinary = HASH(m.lStr," SHA1" &安培;&安培;哈希的二进制形式;对于HexBinary表单使用:HASH(m.lStr,"SHA1",。T。)
*!*?lStrHashBinary
*!* MESSAGEBOX(lStrHashBinary)
lcApple_private_key_decoded_WithoutBeginAndEnd = FILETOSTR " apple_private_key_decoded_WithoutBeginAndEnd.pem"
lcSignatureBinaryPem = VFP_SIGN(lStrHashBinary,m.lcApple_private_key_decoded_WithoutBeginAndEnd)&&不起作用
*!* lcApple_private_key_decoded = FILETOSTR(" apple_private_key_decoded.pem")
*!* lcSignatureBinaryPem = VFP_SIGN(lStrHashBinary,m.lcApple_private_key_decoded)&&不起作用
?lcSignatureBinaryPem
*********************** ************************************************** ***********************************
功能 VFP_SIGN
*使用RSA算法标记数据
LPARAMETERS m.tcData,m.tcPrivateKey
LOCAL m.lcSigned,m.lnRes,m.lnAlg,m.lnKey,m.lnAlgoString,m .lnSize
&& m.lnAlg~sign算法句柄
&& m.lnAlgoString~哈希算法句柄
*初始化API
DO CNG.prg
DECLARE INTEGER GetProcessHeap IN WIN32API
DECLARE INTEGER HeapAlloc IN WIN32API INTEGER hHeap, INTEGER dwFlags, INTEGER dwBytes
DECLARE INTEGER HeapFree IN WIN32API INTEGER hHeap, INTEGER dwFlags, INTEGER lpMem

DEFINE BCRYPT_RSA_ALGORITHM STRCONV "RSA" + CHR (0),5)
DEFINE BCRYPT_PRIVATE_KEY_BLOB STRCONV " PRIVATEBLOB" + CHR (0),5)
DEFINE BCRYPT_SHA1_ALGORITHM STRCONV " SHA1" + CHR (0),5)
DEFINE BCRYPT_PAD_PKCS1 0x00000002
m.lcSigned = ""

*获取RSA算法的句柄
m.lnAlg = 0
m.lnRes = BCryptOpenAlgorithmProvider(@lAlAlg,BCRYPT_RSA_ALGORITHM, NULL ,0)
*导入公钥
IF m.lnRes = 0
m.lnKey = 0
m.lnRes = BCryptImportKeyPair(m.lnAlg,0,BCRYPT_PRIVATE_KEY_BLOB,@ lnKey ,;
m.tcPrivateKey, LEN (m.tcPrivateKey),0)
IF m.lnRes = 0 && HeapAlloc在主堆中给出一个内存位置= GetProcessHeap()
m.lnAlgoString = HeapAlloc(GetProcessHeap(),0, LEN (BCRYPT_SHA1_ALGORITHM ))&& m.lnAlgoString是BCRYPT_SHA1_ALGORITHM的指针或地址
IF m.lnAlgoString<> 0
SYS (2600,m.lnAlgoString, LEN (BCRYPT_SHA1_ALGORITHM),BCRYPT_SHA1_ALGORITHM)&安培;&安培;按地址写入BCRYPT_SHA1_ALGORITHM m.lnAlgoString
*确定签名数据blob的大小
m.lnSize = 0
m.lnRes = BCryptSignHash(m.lnKey,@ llAlgoString,m.tcData, LEN (m.tcData),; &&& Counting lnSize
NULL ,0,@ lnSize,BCRYPT_PAD_PKCS1)
IF m.lnRes = 0
*签署数据块
m.lcSigned = SPACE (m.lnSize)
m.lnRes = BCryptSignHash(m.lnKey,@ llAlgoString,m.tcData, LEN (m .tcData),;
@lcSigned,m.lnSize,@ lnSize,BCRYPT_PAD_PKCS1)
IF m.lnRes = 0
m .lcSigned = LEFT (m.lcSigned,m.lnSize)
ELSE
m.lcSigned = ""
ENDIF
ENDIF
HeapFree(GetProcessHeap(),0,m.lnAlgoString)
ENDIF
BCryptDestroyKey(m.lnKey)
ENDIF
BCryptCloseAlgorithmProvider(m.lnAlg,0)
ENDIF
RETURN m.lc签名
ENDFUNC
******************************** ************************************************** *
功能 VFP_VERIFY
*使用RSA算法验证数据
LPARAMETERS m.tcData,m.tcSignature,m.tcPublicKey
LOCAL m .lcHash,m.lnRes,m.lnAlg, m.lnKey,m.lnAlgoString,m.ll认证
&& m.lnAlg~验证算法句柄
&& m.lnAlgoString~哈希算法句柄
SET 程序 TO BCryptHash.prg ADDITIVE
m.lcHash = HASH(m.tcData," SHA1"
*初始化API
DO CNG.prg
DECLARE INTEGER GetProcessHeap IN WIN32API
DECLARE INTEGER HeapAlloc IN WIN32API INTEGER hHeap, INTEGER dwFlags, INTEGER dwBytes
DECLARE INTEGER HeapFree IN WIN32API INTEGER hHeap, INTEGER dwFlags, INTEGER lpMem

DEFINE BCRYPT_RSA_ALGORITHM STRCONV " ; RSA" + CHR (0),5)
DEFINE BCRYPT_PUBLIC_KEY_BLOB STRCONV " PUBLICBLOB" + CHR (0),5)
DEFINE BCRYPT_SHA1_ALGORITHM STRCONV " SHA1" + CHR (0),5)
DEFINE BCRYPT_PAD_PKCS1 0x00000002

*获取RSA算法的句柄
m.lnAlg = 0
m。 lnRes = BCryptOpenAlgorithmProvider(@ln Alg,BCRYPT_RSA_ALGORITHM, NULL ,0)
*导入公钥
< span style ="color:Blue"> IF m.lnRes = 0
m.lnKey = 0
m.lnRes = BCryptImportKeyPair(m.lnAlg,0,BCRYPT_PUBLIC_KEY_BLOB,@ lnKey ,;
m.tcPublicKey, LEN (m.tcPublicKey),0)
IF m.lnRes = 0
m.lnAlgoString = HeapAlloc(GetProcessHeap(),0, LEN (BCRYPT_SHA1_ALGORITHM))
IF m.lnAlgoString<> 0
SYS (2600,m.lnAlgoString, LEN (BCRYPT_SHA1_ALGORITHM),BCRYPT_SHA1_ALGORITHM)
m.lnRes = BCryptVerifySignature(m.lnKey,@ llAlgoString,m.lcHash, LEN (m.lcHash),;
m.tcSignature,< span style ="color:Blue"> LEN (m.tcSignature),BCRYPT_PAD_PKCS1)
IF m.lnRes = 0
m.llVerified = .T。 &&已验证
ELSE
m.llVerified = .F。 &&未经验证
ENDIF
HeapFree(GetProcessHeap(),0,m.lnAlgoString)
ENDIF
BCryptDestroyKey(m.lnKey)
ENDIF
BCryptCloseAlgorithmProvider(m.lnAlg,0 )
ENDIF
RETURN m.llVerified
ENDFUNC

apple_private_key.pem:


----- BEGIN PRIVATE KEY- ----

MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDdITr2U2fNQUz7

XuQQ8B0 / amlIJA7YlvHm2TPEDq6CTEg8LtS6NiUAtYcVfjpQsPy7dyvEP894fiAB

sL88Dae181 + REEU53O / Jpn2I / 5ltBTP2WSFdN6u + 6 / aF1PRfg0BRVDfLgFNeMI9E

Ewi0NHTAv9Ti0FiHijK3M7Gb2vEsK7Upl627405yKDPmY + aKdSeUYpTfnWF1p1uI

uCGdb1Eh59vjCYRt76cvqNz6HlmphiaVZR2bQW4gKnEG9Pp4r2LYcnGrj7Nfv88H

fYi5jgiObR / 78as + s1epy7 + Ae9JLoyl5m5HSfduPJtICUaNSM6Djea04dlFmoNpd

vjsouJ31AgMBAAECggEAE9wuLX1kLz0UKudk2FiYZ9 + OWP / sDWvRIgiT66Hd7nnn

avBRzr + aJywmi7mghyq + KCAV4DRS7 + F0AnLbWgtn6qGHDcJGVWIQby3yzGEYaIA1

IIT0yCh91lHe / DoaEJH7LtK / iBloY2c9FsIW4AhuC / mupwhLSzEQSP / TJA / mRS8l

AybGPGRpLk + UCLHjC5AS2FuxpSdpc / diEYAgYqhQ96djbokquAYcdGXXUMlRWTqM

ROW2X7qWqJNOl3tGBroqvvLx37a + ELHT63qqYLoai3bz1Su2XZ8Zdm4kLUncyahH

XLy2PztbdM04CE60oGiIJWxAtNxiS / xJYts + V14rAQKBgQDu9wf7aY9UZCOj + DR +

CbPpXq06D + TBxuD4GYzu2jN + PNkGyB0utuFbnierwcidQT / TUVDStFHaCsoZhhv1

uTwsAYMtLdhbv1HiZQkxG8TlbbiQbXcnoRwI6szMLRVNk6qEpBkx8Ro5aDnDBs6 /

Nxuazic5MMFXJBuJ8h5j1eIDVQKBgQDs5LfS5ABm18rgHqPOj8E5qvEzdPLgxnxc

nGSdMxE3iffSJqPoaKUx + OsRGEvmkmFmVwsESzBdwOoTtPVPeAats3Uwt3K4Su0 +

x5JyFidJrm1vzSDaBZAKZT5WQPUsGcjB19rL62jo3WS3D2YlH3rQ2YuY82RKiCvV

MsuLAp1wIQKBgF7qchozaIHdsKZdXQQ ++ F4Wg / NO / $ 7 $ b OJL6c8luFDAaDa7y2oaGpwhTRsjyksJ8S + EyzJayYgC3MmAZP5ho7kEu3qNHR4 / P

F2KXWLc0pQSGRbGfuH4 0xPTOaDsFxjL / QZCwl7XIntLs / Z9CMz32Y2ptAoGAL83D

zpnV / uri9LEaKy / VNTbqr5CVBojnRaUFpLdObR + 5U74aa2balyf8 / 5kgj + nQH9 / G

yFoH65NnaQymSCAXcOv65RbP3qK4F2gchEs2KGc7jEkfrP9cXsypdKxtDTYyzfMq

IuZhaERs84f2 + 9zLYuPTiMzs2yF5fu9eJbIkZSECgYEAgoeAd2FUby3TD / WZ82R7 <无线电通信/>
EFXxuY2FjnLTWn / qkK0Wg92UbQJOXto7TJ7M8ufr1cPl2G0wgCR8YiRc73IwMiVE

ELpyIphpj52 + GA1fne / 8CKy5ATgHQ1xQV2UHsprN4tRXtjmG1I8fika0IIiYpap5

26fj + 6sKNSAfOBBWpeXAC70 =

----- END PRIVATE KEY -----




解决方案

< blockquote>

Chilkat Software提供了一些工具,允许您从Foxpro读取和写入PEM密钥文件。 这个页面上有很多例子:https://www.example-code.com/foxpro/rsa.asp


Kevin Clark


Hi everybody.

Does anybody knows if there is ASN.1 parser in a code of VFP?
I need to parse the apple_private_key.pem file.
I need to parse this file for using as a private key in CNG's BCrypt.dll's BCryptVerifySignature function as a parameter.

* 2 It's test prg for signing with .pem file that had come from outside firm
CLEAR 
SET PROCEDURE TO BCryptSign.prg, BCryptHash.prg ADDITIVE  
m.lpr13encoded=FILETOSTR("apple_private_key.pem") && encoded base64 binary
m.lpr14decoded=STRCONV(m.lpr13encoded, 14) && decoded base64 binary
STRTOFILE(m.lpr14decoded, "apple_private_key_decoded.pem")

m.n = ALINES(laPrKey, m.lpr13encoded)
m.lpr13encodedWithoutBeginAndEnd = SPACE(0)
FOR m.i = 1 TO m.n && remove first and last lines
IF m.i <> 1 AND m.i <> m.n
	&& ?laPrKey[m.i]
	m.lpr13encodedWithoutBeginAndEnd = m.lpr13encodedWithoutBeginAndEnd + laPrKey[m.i]
ENDIF 
ENDFOR 
&& ?m.lpr13encodedWithoutBeginAndEnd
STRTOFILE(m.lpr13encodedWithoutBeginAndEnd, "apple_private_key_WithoutBeginAndEnd.pem")
m.lpr14decodedWithoutBeginAndEnd=STRCONV(m.lpr13encodedWithoutBeginAndEnd, 14)
STRTOFILE(m.lpr14decodedWithoutBeginAndEnd, "apple_private_key_decoded_WithoutBeginAndEnd.pem")
CLEAR 
  SET PROCEDURE TO BCryptSign.prg, BCryptHash.prg ADDITIVE  
  lStr = "Man" && The result for SHA1 must be: 8B70BB3A4D458CF297AB7B3A3B07B63B5CA07DE9  
  lStrHashBinary = HASH(m.lStr, "SHA1") && binary form of a Hash; for HexBinary form use: HASH(m.lStr, "SHA1", .T.) 
*!*	 ?lStrHashBinary 
*!*	 MESSAGEBOX(lStrHashBinary)
lcApple_private_key_decoded_WithoutBeginAndEnd = FILETOSTR("apple_private_key_decoded_WithoutBeginAndEnd.pem")
lcSignatureBinaryPem = VFP_SIGN(lStrHashBinary, m.lcApple_private_key_decoded_WithoutBeginAndEnd) && does not work
*!*	lcApple_private_key_decoded = FILETOSTR("apple_private_key_decoded.pem")
*!*	lcSignatureBinaryPem = VFP_SIGN(lStrHashBinary, m.lcApple_private_key_decoded)  && does not work
?lcSignatureBinaryPem 
************************************************************************************************************
FUNCTION VFP_SIGN  
* Signs data using the RSA algorithm  
  LPARAMETERS m.tcData, m.tcPrivateKey  
  LOCAL m.lcSigned, m.lnRes, m.lnAlg, m.lnKey, m.lnAlgoString, m.lnSize 
 && m.lnAlg ~ sign algorithm handle
 && m.lnAlgoString ~ hash algorithm handle
 * Initialize API  
  DO CNG.prg  
  DECLARE INTEGER GetProcessHeap IN WIN32API  
  DECLARE INTEGER HeapAlloc IN WIN32API INTEGER hHeap, INTEGER dwFlags, INTEGER dwBytes  
  DECLARE INTEGER HeapFree IN WIN32API INTEGER hHeap, INTEGER dwFlags, INTEGER lpMem  
    
  #DEFINE BCRYPT_RSA_ALGORITHM STRCONV("RSA" + CHR(0), 5)  
  #DEFINE BCRYPT_PRIVATE_KEY_BLOB STRCONV("PRIVATEBLOB" + CHR(0), 5)  
  #DEFINE BCRYPT_SHA1_ALGORITHM STRCONV("SHA1" + CHR(0), 5)  
  #DEFINE BCRYPT_PAD_PKCS1 0x00000002  
  m.lcSigned = ""  
    
 * Get a handle to the RSA algorithm 
  m.lnAlg = 0  
  m.lnRes = BCryptOpenAlgorithmProvider(@lnAlg, BCRYPT_RSA_ALGORITHM, NULL, 0)  
 * Import the public key  
  IF m.lnRes = 0  
   m.lnKey = 0  
   m.lnRes = BCryptImportKeyPair(m.lnAlg, 0, BCRYPT_PRIVATE_KEY_BLOB, @lnKey, ;  
    m.tcPrivateKey, LEN(m.tcPrivateKey), 0)  
   IF m.lnRes = 0  && HeapAlloc gives a memory place in the main heap = GetProcessHeap()
    m.lnAlgoString = HeapAlloc(GetProcessHeap(), 0, LEN(BCRYPT_SHA1_ALGORITHM)) && m.lnAlgoString is a pointer or a address of a BCRYPT_SHA1_ALGORITHM  
    IF m.lnAlgoString <> 0  
     SYS(2600, m.lnAlgoString, LEN(BCRYPT_SHA1_ALGORITHM), BCRYPT_SHA1_ALGORITHM) && writes BCRYPT_SHA1_ALGORITHM by address m.lnAlgoString  
 * Determine the size of the signed data blob  
     m.lnSize = 0  
     m.lnRes = BCryptSignHash(m.lnKey, @lnAlgoString, m.tcData, LEN(m.tcData), ; && Counting lnSize 
      NULL, 0, @lnSize, BCRYPT_PAD_PKCS1)  
     IF m.lnRes = 0  
 * Sign the data block  
      m.lcSigned = SPACE(m.lnSize)  
      m.lnRes = BCryptSignHash(m.lnKey, @lnAlgoString, m.tcData, LEN(m.tcData), ;  
       @lcSigned, m.lnSize, @lnSize, BCRYPT_PAD_PKCS1)  
      IF m.lnRes = 0  
       m.lcSigned = LEFT(m.lcSigned, m.lnSize)  
      ELSE  
       m.lcSigned = ""  
      ENDIF  
     ENDIF  
     HeapFree(GetProcessHeap(), 0, m.lnAlgoString)  
    ENDIF  
    BCryptDestroyKey(m.lnKey)  
   ENDIF  
   BCryptCloseAlgorithmProvider(m.lnAlg, 0)  
  ENDIF  
  RETURN m.lcSigned  
ENDFUNC
***********************************************************************************
FUNCTION VFP_VERIFY
* Verifies data using the RSA algorithm 
  LPARAMETERS m.tcData, m.tcSignature, m.tcPublicKey  
  LOCAL m.lcHash, m.lnRes, m.lnAlg, m.lnKey, m.lnAlgoString, m.llVerified 
 && m.lnAlg ~ verifiing algorithm handle
 && m.lnAlgoString ~ hash algorithm handle
  SET PROCEDURE TO BCryptHash.prg ADDITIVE
  m.lcHash=HASH(m.tcData,"SHA1")  
 * Initialize API  
  DO CNG.prg  
  DECLARE INTEGER GetProcessHeap IN WIN32API  
  DECLARE INTEGER HeapAlloc IN WIN32API INTEGER hHeap, INTEGER dwFlags, INTEGER dwBytes  
  DECLARE INTEGER HeapFree IN WIN32API INTEGER hHeap, INTEGER dwFlags, INTEGER lpMem  
    
  #DEFINE BCRYPT_RSA_ALGORITHM STRCONV("RSA" + CHR(0), 5)  
  #DEFINE BCRYPT_PUBLIC_KEY_BLOB STRCONV("PUBLICBLOB" + CHR(0), 5)  
  #DEFINE BCRYPT_SHA1_ALGORITHM STRCONV("SHA1" + CHR(0), 5)  
  #DEFINE BCRYPT_PAD_PKCS1 0x00000002  
    
 * Get a handle to the RSA algorithm  
  m.lnAlg = 0  
  m.lnRes = BCryptOpenAlgorithmProvider(@lnAlg, BCRYPT_RSA_ALGORITHM, NULL, 0)  
 * Import the public key  
  IF m.lnRes = 0  
   m.lnKey = 0  
   m.lnRes = BCryptImportKeyPair(m.lnAlg, 0, BCRYPT_PUBLIC_KEY_BLOB, @lnKey, ;  
    m.tcPublicKey, LEN(m.tcPublicKey), 0)  
   IF m.lnRes = 0  
    m.lnAlgoString = HeapAlloc(GetProcessHeap(), 0, LEN(BCRYPT_SHA1_ALGORITHM))  
    IF m.lnAlgoString <> 0  
     SYS(2600, m.lnAlgoString, LEN(BCRYPT_SHA1_ALGORITHM), BCRYPT_SHA1_ALGORITHM)  
     m.lnRes = BCryptVerifySignature(m.lnKey, @lnAlgoString, m.lcHash, LEN(m.lcHash), ;  
      m.tcSignature, LEN(m.tcSignature), BCRYPT_PAD_PKCS1)   
     IF m.lnRes = 0  
     m.llVerified=.T. && Verified  
     ELSE
     m.llVerified=.F. && Not verified
     ENDIF  
     HeapFree(GetProcessHeap(), 0, m.lnAlgoString)  
    ENDIF  
    BCryptDestroyKey(m.lnKey)  
   ENDIF  
   BCryptCloseAlgorithmProvider(m.lnAlg, 0)  
  ENDIF  
  RETURN m.llVerified 
ENDFUNC

apple_private_key.pem:

-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDdITr2U2fNQUz7
XuQQ8B0/amlIJA7YlvHm2TPEDq6CTEg8LtS6NiUAtYcVfjpQsPy7dyvEP894fiAB
sL88Dae181+REEU53O/Jpn2I/5ltBTP2WSFdN6u+6/aF1PRfg0BRVDfLgFNeMI9E
Ewi0NHTAv9Ti0FiHijK3M7Gb2vEsK7Upl627405yKDPmY+aKdSeUYpTfnWF1p1uI
uCGdb1Eh59vjCYRt76cvqNz6HlmphiaVZR2bQW4gKnEG9Pp4r2LYcnGrj7Nfv88H
fYi5jgiObR/78as+s1epy7+Ae9JLoyl5m5HSfduPJtICUaNSM6Djea04dlFmoNpd
vjsouJ31AgMBAAECggEAE9wuLX1kLz0UKudk2FiYZ9+owP/sDWvRIgiT66Hd7nnn
avBRzr+aJywmi7mghyq+KCAV4DRS7+F0AnLbWgtn6qGHDcJGVWIQby3yzGEYaIA1
IIT0yCh91lHe/DoaEJH7LtK/iBloY2c9FsIW4AhuC/mupwhLSzEQSP/tja/mRS8l
AybGPGRpLk+UCLHjC5AS2FuxpSdpc/diEYAgYqhQ96djbokquAYcdGXXUMlRWTqM
ROW2X7qWqJNOl3tGBroqvvLx37a+ELHT63qqYLoai3bz1Su2XZ8Zdm4kLUncyahH
XLy2PztbdM04CE60oGiIJWxAtNxiS/xJYts+V14rAQKBgQDu9wf7aY9UZCOj+DR+
CbPpXq06D+TBxuD4GYzu2jN+PNkGyB0utuFbnierwcidQT/TUVDStFHaCsoZhhv1
uTwsAYMtLdhbv1HiZQkxG8TlbbiQbXcnoRwI6szMLRVNk6qEpBkx8Ro5aDnDBs6/
Nxuazic5MMFXJBuJ8h5j1eIDVQKBgQDs5LfS5ABm18rgHqPOj8E5qvEzdPLgxnxc
nGSdMxE3iffSJqPoaKUx+OsRGEvmkmFmVwsESzBdwOoTtPVPeAats3Uwt3K4Su0+
x5JyFidJrm1vzSDaBZAKZT5WQPUsGcjB19rL62jo3WS3D2YlH3rQ2YuY82RKiCvV
MsuLAp1wIQKBgF7qchozaIHdsKZdXQQ++F4Wg/nO/E7Xnt4M0ATDWLaolo9yBt1a
OJL6c8luFDAaDa7y2oaGpwhTRsjyksJ8S+EyzJayYgC3MmAZP5ho7kEu3qNHR4/P
F2KXWLc0pQSGRbGfuH40xPTOaDsFxjL/QZCwl7XIntLs/Z9CMz32Y2ptAoGAL83D
zpnV/uri9LEaKy/VNTbqr5CVBojnRaUFpLdObR+5U74aa2balyf8/5kgj+nQH9/G
yFoH65NnaQymSCAXcOv65RbP3qK4F2gchEs2KGc7jEkfrP9cXsypdKxtDTYyzfMq
IuZhaERs84f2+9zLYuPTiMzs2yF5fu9eJbIkZSECgYEAgoeAd2FUby3TD/WZ82R7
EFXxuY2FjnLTWn/qkK0Wg92UbQJOXto7TJ7M8ufr1cPl2G0wgCR8YiRc73IwMiVE
ELpyIphpj52+GA1fne/8CKy5ATgHQ1xQV2UHsprN4tRXtjmG1I8fika0IIiYpap5
26fj+6sKNSAfOBBWpeXAC70=
-----END PRIVATE KEY-----



解决方案

Chilkat Software has some tools that allow you to read and write PEM key files from Foxpro.  There are a bunch of examples on this page: https://www.example-code.com/foxpro/rsa.asp

Kevin Clark


这篇关于* .PEM私钥主要文件ASN.1 PARSER的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆