2

次のような長い文字列があります。

  MIIEpAIBAAKCAQEAyUe3zAACNX50XRvh6CsL05yjyXZRpMKFqlKFN4QfrbbkGoGfY7NlfnicccHg1Kux8+BI5TxoOVF28Qa7DRiZRz6HnYRxvMJkKLhkcZMGhApefSS3Swk2kNw6bzVqMo20fidIb/FuDzRSn0E9UIXlOWFCFOdFFs3h4bhKkEagkW8swSo6dwJHoEzECxtn3U7Z6qnYbBJzxfY2H0O8CerdHHisIrjj9bofvYx4dRKUq98X16YPWIgutxJFiJN5XrWJ1IpYbaBCSxfdVQUe06C/CS47hGUXhO2GuWynW9u08yZRPHO+cbSE8W5/cq3vZrYBOX/LAdRKMJP76BX0nxV/3wIDAQABAoIBAQC7wFZFyExHMenBYFzdgCnL/nUZW3DUy057jfYNzwTtuYgU4YyYJ6Mo0cC8rCjYuD+KSVA15J8juEXGloysrqFrv3wpBn5BoOJkyXuIJakSScnR2gnPyIxJm+Q2EBE7jssqUeJT6VTMgfX/748OKZekaoCFlyTvHKTzNED5S6hDf1SlUhstGYbNYH6PhbID+ssdjQRt7Ys1s3EFLAxJIJeAeLTPi4dJVrBjBVShhl9BTzRRQH3sik7bdDHEq7PU6/Y63ZEPc7z6pdEb+sx8C4DKtRpRiUae1EooH7Ifk1DdF97wjOzA3VGeQFspy1ipmS1Xp+668Z0vrs6yFEUWLtUhAoGBAO8YMJuYyO59Dh/c+Y/5g+bSgQr2GZ5cFLlTFQ4+v3VPbe4Zezd5L0/vse/1qKEILwwHxRC5t3KSIysEYLmHLwskGBofH7mDAw0wcOttXGTAWiqzMWKae8CNCX8jNw9A3bq7j+e0Im+Bee0nXjhMFcOqiEO+yjAsvhUCWI0F+vmdAoGBANeDDo6KHboPu69i5UiH5TfnkLLQoovdXYgEmBFawJnMEc5EM6UhG+YGadHR7oNT5OM5K4WK3Uif3vNqspaQ0mD6gG514SZyATuKWy3+bgqgPfV8YOHsoGdc8I58qVXpUrSE07PXaH+N7kRtn3i0NHATLKJ4OKaucNolf0NoCpSrAoGALWupAEYcFcJIBqGR/1nlRtpCjXSHFWBkx3gTDeu5r21xcsQAdl9dL5BXe0Bt0nmdhmmLdEvzn55HdAqW3Wfi9fjbY0r6WeGbmMvVB8R0wucPugDkpti2HbQtU6u67/jgpnKvOdMsn4Y3RWgvK/64O72PuV7rRg+Z5J/XdqLmNLkCgYAGqmQJ3pW6yn/Ilet3idR6HSxpi3BrmQYqjdHSP5dTam9mjM94HQUK4UnmlnKlFzQuHveMotXjSCaSKsupQoNvQnA0emrjUIVfPRFC4+qtY3VnIVixxCrV55b9ITfvk07ejHkrx87Qmygyb52OEyzIBp/LyqId7alJ5f0ArbgeDwKBgQDDONXscChQQLPAFO9xLVLTU2JSCWcJAt4Dh8xhfDkGtYg+AcRb75+pVGW7jpg3311N8suuF2Eq3RWoCdvzUHD+TLUNMQrw7IfpKhtL1Po6KA/+G6xwh00ZkXL5o6AbmQ/fZW6/Yk5yx5PRxuwhLYCn6zVGJnENWmzkhVtawtHHFw==

このようなブロックに連結解除/分割する必要があります。つまり、X509 証明書として使用できる正しい形式に戻します。

-----BEGIN CERTIFICATE-----
MIIGNTCCBR2gAwIBAgIKYWYgXQABAAACazANBgkqhkiG9w0BAQUFADBDMRMwEQYK
CZImiZPyLGQBGRYDY29tMRcwFQYKCZImiZPyLGQBGRYHY2puZGVtbzETMBEGA1UE
AxMKY2puZGVtby1DQTAeFw0xMzA0MTIxNjM4MTVaFw0xNDAzMDgxMjM0NDhaMHwx
CzAJBgNVBAYTAkdCMRIwEAYDVQQIEwlCZXJrc2hpcmUxEDAOBgNVBAcTB1NFIFRl
YW0xDzANBgNVBAoTBlZlbmFmaTERMA8GA1UEAxMIbmV3Y2VydDQxIzAhBgkqhkiG
9w0BCQEWFGphc29uLmJvdXJuZUB2ZWQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOC
AQ8AMIIBCgKCAQEAv+ILegq1B81jOosGpySK+FO4+WQXJk4dyGWbC/MRw5JU2ShQ
Mjkpab8FDBgpZUmG6mvwrOBY8eK1NHvcognIPuHiQNm/c0YSqz/U8xTmBS0JRLd5
fDSkuhD5T7GKNa62Wg7dIPh3HtiKRTdC9HIBP3p/BFHz+jetgd8yM72Uzp0Lchpu
NJJDA5m0pgjbTOTlQ70tOq28kW8Hsko9p6cTQsVBOjxu7S6xSBq/g35NpgVZ3kic
jLEPAkdxAKWNORLOI3wD+AMiTp0DoV2fIw9do5a2XdbLy1QlTkRkXO+vM3LHCfAb
JfLZjrp11yP+wCz3NIJIi9lBDnYLo+6U2UOsZwIDAQABo4IC8DCCAuwwDgYDVR0P
AQH/BAQDAgWgMCkGA1UdJQQiMCAGCCsGAQUFBwMCBggrBgEFBQcDBAYKKwYBBAGC
NwoDBDAfBgNVHREEGDAWgRRqYXNvbi5ib3VybmVAdmVkLmNvbTAdBgNVHQ4EFgQU
SQCNiZ1456n8I0fi65oMWB8+MxEwHwYDVR0jBBgwFoAUmoUm8wJiYz+n+ZtdEoCU
i9XvXVgwgdMGA1UdHwSByzCByDCBxaCBwqCBv4aBvGxkYXA6Ly8vQ049Y2puZGVt   
by1DQSgxKSxDTj1XSU4tM0NGNDFOQlBUODUsQ049Q0RQLENOPVB1YmxpYyUyMEtl
eSUyMFNlcnZpY2VzLENOPVNlcnZpY2VzLENOPUNvbmZpZ3VyYXRpb24sREM9Y2pu
-----BEGIN CERTIFICATE-----

Ruby には組み込みのメソッドがありますか、それとも簡単な方法はありますか?

よろしくお願いします

4

3 に答える 3

7

これにより、配列が取得されます。

my_long_string.scan(/.{64}/)

改行と一緒に戻したい場合:

my_long_string.scan(/.{64}/).join("\n")
于 2013-04-18T16:29:27.750 に答える
2

Ruby のBase64モジュールを使用して、文字列を再エンコードできます。モジュールは正しいパディングを考慮します:

require "base64"

str = "MIIEpAIBAAKCAQEAyUe3zAACNX50XRvh6CsL05yjyXZRpMKFqlKFN4QfrbbkGoGfY7Nlf..."
b64 = Base64.encode64(Base64.decode64(str))
pem = "-----BEGIN CERTIFICATE-----\n" << b64 << "-----END CERTIFICATE-----\n"

puts pem
# -----BEGIN CERTIFICATE-----
# MIIEpAIBAAKCAQEAyUe3zAACNX50XRvh6CsL05yjyXZRpMKFqlKFN4Qfrbbk
# GoGfY7NlfnicccHg1Kux8+BI5TxoOVF28Qa7DRiZRz6HnYRxvMJkKLhkcZMG
# hApefSS3Swk2kNw6bzVqMo20fidIb/FuDzRSn0E9UIXlOWFCFOdFFs3h4bhK
# ...
# U2JSCWcJAt4Dh8xhfDkGtYg+AcRb75+pVGW7jpg3311N8suuF2Eq3RWoCdvz
# UHD+TLUNMQrw7IfpKhtL1Po6KA/+G6xwh00ZkXL5o6AbmQ/fZW6/Yk5yx5PR
# xuwhLYCn6zVGJnENWmzkhVtawtHHFw==
# -----END CERTIFICATE-----
于 2013-04-18T18:49:42.530 に答える
1

たとえば、次のように 64 文字ごとに分割できます。

a = "MIIGNTCCBR2gAwIBAgIKYWYgXQABAAACazANBgkqhkiG9w0BAQUFADBDMRMwEQYKCZImiZPyLGQBGRYDY29tMRcwFQYKCZImiZPyLGQBGRYHY2puZGVtbzETMBEGA1UE"
p a.scan(/.{1,64}/)

出力:

["MIIGNTCCBR2gAwIBAgIKYWYgXQABAAACazANBgkqhkiG9w0BAQUFADBDMRMwEQYK", "CZImiZPyLGQBGRYDY29tMRcwFQYKCZImiZPyLGQBGRYHY2puZGVtbzETMBEGA1UE"]

次にjoin、それらに新しい行を追加します\n

print a.scan(/.{1,64}/).join("\n")

出力:

MIIGNTCCBR2gAwIBAgIKYWYgXQABAAACazANBgkqhkiG9w0BAQUFADBDMRMwEQYK
CZImiZPyLGQBGRYDY29tMRcwFQYKCZImiZPyLGQBGRYHY2puZGVtbzETMBEGA1UE 
于 2013-04-18T16:29:16.587 に答える