* .PEM私钥主要文件ASN.1 PARSER [英] *.PEM PRIVATE KEY FILE 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屋!