本文介绍了* .PEM私钥主要文件ASN.1 PARSER的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 29岁程序员,3月因学历无情被辞! 大家好。 有谁知道是否在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) *导入公钥 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, 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 ----- 解决方案 Chilkat Software提供了一些工具,允许您从Foxpro读取和写入PEM密钥文件。 这个页面上有很多例子:https://www.example-code.com/foxpro/rsa.asp Kevin ClarkHi 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 firmCLEARSET PROCEDURE TO BCryptSign.prg, BCryptHash.prg ADDITIVEm.lpr13encoded=FILETOSTR("apple_private_key.pem") && encoded base64 binarym.lpr14decoded=STRCONV(m.lpr13encoded, 14) && decoded base64 binarySTRTOFILE(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 linesIF m.i <> 1 AND m.i <> m.n&& ?laPrKey[m.i]m.lpr13encodedWithoutBeginAndEnd = m.lpr13encodedWithoutBeginAndEnd + laPrKey[m.i]ENDIFENDFOR&& ?m.lpr13encodedWithoutBeginAndEndSTRTOFILE(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.lcSignedENDFUNC***********************************************************************************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.llVerifiedENDFUNCapple_private_key.pem:-----BEGIN PRIVATE KEY-----MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDdITr2U2fNQUz7XuQQ8B0/amlIJA7YlvHm2TPEDq6CTEg8LtS6NiUAtYcVfjpQsPy7dyvEP894fiABsL88Dae181+REEU53O/Jpn2I/5ltBTP2WSFdN6u+6/aF1PRfg0BRVDfLgFNeMI9EEwi0NHTAv9Ti0FiHijK3M7Gb2vEsK7Upl627405yKDPmY+aKdSeUYpTfnWF1p1uIuCGdb1Eh59vjCYRt76cvqNz6HlmphiaVZR2bQW4gKnEG9Pp4r2LYcnGrj7Nfv88HfYi5jgiObR/78as+s1epy7+Ae9JLoyl5m5HSfduPJtICUaNSM6Djea04dlFmoNpdvjsouJ31AgMBAAECggEAE9wuLX1kLz0UKudk2FiYZ9+owP/sDWvRIgiT66Hd7nnnavBRzr+aJywmi7mghyq+KCAV4DRS7+F0AnLbWgtn6qGHDcJGVWIQby3yzGEYaIA1IIT0yCh91lHe/DoaEJH7LtK/iBloY2c9FsIW4AhuC/mupwhLSzEQSP/tja/mRS8lAybGPGRpLk+UCLHjC5AS2FuxpSdpc/diEYAgYqhQ96djbokquAYcdGXXUMlRWTqMROW2X7qWqJNOl3tGBroqvvLx37a+ELHT63qqYLoai3bz1Su2XZ8Zdm4kLUncyahHXLy2PztbdM04CE60oGiIJWxAtNxiS/xJYts+V14rAQKBgQDu9wf7aY9UZCOj+DR+CbPpXq06D+TBxuD4GYzu2jN+PNkGyB0utuFbnierwcidQT/TUVDStFHaCsoZhhv1uTwsAYMtLdhbv1HiZQkxG8TlbbiQbXcnoRwI6szMLRVNk6qEpBkx8Ro5aDnDBs6/Nxuazic5MMFXJBuJ8h5j1eIDVQKBgQDs5LfS5ABm18rgHqPOj8E5qvEzdPLgxnxcnGSdMxE3iffSJqPoaKUx+OsRGEvmkmFmVwsESzBdwOoTtPVPeAats3Uwt3K4Su0+x5JyFidJrm1vzSDaBZAKZT5WQPUsGcjB19rL62jo3WS3D2YlH3rQ2YuY82RKiCvVMsuLAp1wIQKBgF7qchozaIHdsKZdXQQ++F4Wg/nO/E7Xnt4M0ATDWLaolo9yBt1aOJL6c8luFDAaDa7y2oaGpwhTRsjyksJ8S+EyzJayYgC3MmAZP5ho7kEu3qNHR4/PF2KXWLc0pQSGRbGfuH40xPTOaDsFxjL/QZCwl7XIntLs/Z9CMz32Y2ptAoGAL83DzpnV/uri9LEaKy/VNTbqr5CVBojnRaUFpLdObR+5U74aa2balyf8/5kgj+nQH9/GyFoH65NnaQymSCAXcOv65RbP3qK4F2gchEs2KGc7jEkfrP9cXsypdKxtDTYyzfMqIuZhaERs84f2+9zLYuPTiMzs2yF5fu9eJbIkZSECgYEAgoeAd2FUby3TD/WZ82R7EFXxuY2FjnLTWn/qkK0Wg92UbQJOXto7TJ7M8ufr1cPl2G0wgCR8YiRc73IwMiVEELpyIphpj52+GA1fne/8CKy5ATgHQ1xQV2UHsprN4tRXtjmG1I8fika0IIiYpap526fj+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.aspKevin Clark 这篇关于* .PEM私钥主要文件ASN.1 PARSER的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 上岸,阿里云! 07-30 05:57