Я хочу объявить строку, содержащую мой открытый ключ RSA. В Objective-C я сделал это так:
NSString *pubKey = @"-----BEGIN RSA PUBLIC KEY-----\n"
"MIIBCgKCAQEA+xGZ/wcz9ugFpP07Nspo6U17l0YhFiFpxxU4pTk3Lifz9R3zsIsu\n"
"ERwta7+fWIfxOo208ett/jhskiVodSEt3QBGh4XBipyWopKwZ93HHaDVZAALi/2A\n"
"+xTBtWdEo7XGUujKDvC2/aZKukfjpOiUI8AhLAfjmlcD/UZ1QPh0mHsglRNCmpCw\n"
"mwSXA9VNmhz+PiB+Dml4WWnKW/VHo2ujTXxq7+efMU4H2fny3Se3KYOsFPFGZ1TN\n"
"QSYlFuShWrHPtiLmUdPoP6CV2mML1tk+l7DIIqXrQhLUKDACeM5roMx0kLhUWB8P\n"
"+0uj1CNlNN4JRZlC7xFfqiMbFRU9Z4N6YwIDAQAB\n"
"-----END RSA PUBLIC KEY-----";
Когда я отображаю эту строку в отладчике, она выглядит так:
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEA+xGZ/wcz9ugFpP07Nspo6U17l0YhFiFpxxU4pTk3Lifz9R3zsIsu
ERwta7+fWIfxOo208ett/jhskiVodSEt3QBGh4XBipyWopKwZ93HHaDVZAALi/2A
+xTBtWdEo7XGUujKDvC2/aZKukfjpOiUI8AhLAfjmlcD/UZ1QPh0mHsglRNCmpCw
mwSXA9VNmhz+PiB+Dml4WWnKW/VHo2ujTXxq7+efMU4H2fny3Se3KYOsFPFGZ1TN
QSYlFuShWrHPtiLmUdPoP6CV2mML1tk+l7DIIqXrQhLUKDACeM5roMx0kLhUWB8P
+0uj1CNlNN4JRZlC7xFfqiMbFRU9Z4N6YwIDAQAB
-----END RSA PUBLIC KEY-----
Сейчас я пытаюсь объявить ту же самую строку в Swift (Xcode 10.2) и не смог заставить ее работать.
Я пробовал следующее:
let pubKeyArray : [String]
let pubKey : String
self.pubKeyArray = ["-----BEGIN RSA PUBLIC KEY-----",
"MIIBCgKCAQEA+xGZ/wcz9ugFpP07Nspo6U17l0YhFiFpxxU4pTk3Lifz9R3zsIsu",
"ERwta7+fWIfxOo208ett/jhskiVodSEt3QBGh4XBipyWopKwZ93HHaDVZAALi/2A",
"+xTBtWdEo7XGUujKDvC2/aZKukfjpOiUI8AhLAfjmlcD/UZ1QPh0mHsglRNCmpCw",
"mwSXA9VNmhz+PiB+Dml4WWnKW/VHo2ujTXxq7+efMU4H2fny3Se3KYOsFPFGZ1TN",
"QSYlFuShWrHPtiLmUdPoP6CV2mML1tk+l7DIIqXrQhLUKDACeM5roMx0kLhUWB8P",
"+0uj1CNlNN4JRZlC7xFfqiMbFRU9Z4N6YwIDAQAB",
"-----END RSA PUBLIC KEY-----"]
self.pubKey = self.pubKeyArray.joined(separator: "\n")
Когда я отображаю эту строку в отладчике, она выглядит так:
"-----BEGIN RSA PUBLIC KEY-----\nMIIBCgKCAQEA+xGZ/wcz9ugFpP07Nspo6U17l0YhFiFpxxU4pTk3Lifz9R3zsIsu\nERwta7+fWIfxOo208ett/jhskiVodSEt3QBGh4XBipyWopKwZ93HHaDVZAALi/2A\n+xTBtWdEo7XGUujKDvC2/aZKukfjpOiUI8AhLAfjmlcD/UZ1QPh0mHsglRNCmpCw\nmwSXA9VNmhz+PiB+Dml4WWnKW/VHo2ujTXxq7+efMU4H2fny3Se3KYOsFPFGZ1TN\nQSYlFuShWrHPtiLmUdPoP6CV2mML1tk+l7DIIqXrQhLUKDACeM5roMx0kLhUWB8P\n+0uj1CNlNN4JRZlC7xFfqiMbFRU9Z4N6YwIDAQAB\n-----END RSA PUBLIC KEY-----"
Таким образом, символ новой строки не распознается. Я также пробовал "\\n" и "\r\n", но безрезультатно.
Какой правильный разделитель использовать здесь?
Независимо от этого, ваш код можно упростить, используя многострочные строки с помощью """
Не связанный, но ваш код можно значительно упростить, поместив сертификат в файл и прочитав его из этого файла.
Строка, которую вы видите в отладчике, — это debugDescription
строки. debugDescription
заменит такие вещи, как символ новой строки, на обратную косую черту + n
(предполагается, что это даст понять, что есть новая строка).
Если вы хотите увидеть реальную строку, вы должны просто print
ее. В lldb
выполните:
po print(pubKey)
Вместо того, чтобы создавать массив и строить из него строку, вы можете вместо этого использовать многострочный строковый литерал. Как говорит Язык программирования Swift:
Multiline String Literals
If you need a string that spans several lines, use a multiline string literal—a sequence of characters surrounded by three double quotation marks:
let quotation = """ The White Rabbit put on his spectacles. "Where shall I begin, please your Majesty?" he asked. "Begin at the beginning," the King said gravely, "and go on till you come to the end; then stop." """
Итак, в вашем случае:
let pubKey = """
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEA+xGZ/wcz9ugFpP07Nspo6U17l0YhFiFpxxU4pTk3Lifz9R3zsIsu
ERwta7+fWIfxOo208ett/jhskiVodSEt3QBGh4XBipyWopKwZ93HHaDVZAALi/2A
+xTBtWdEo7XGUujKDvC2/aZKukfjpOiUI8AhLAfjmlcD/UZ1QPh0mHsglRNCmpCw
mwSXA9VNmhz+PiB+Dml4WWnKW/VHo2ujTXxq7+efMU4H2fny3Se3KYOsFPFGZ1TN
QSYlFuShWrHPtiLmUdPoP6CV2mML1tk+l7DIIqXrQhLUKDACeM5roMx0kLhUWB8P
+0uj1CNlNN4JRZlC7xFfqiMbFRU9Z4N6YwIDAQAB
-----END RSA PUBLIC KEY-----
"""
Обратите внимание на пустую строку между строкой «END RSA PUBLIC KEY» и закрывающими кавычками. Это потому, что в вашем исходном примере на Objective-C предполагалось, что вам нужна новая строка в конце этой последней строки. Если вам не нужен этот последний символ новой строки, просто опустите эту пустую строку в конце, например:
let pubKey = """
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEA+xGZ/wcz9ugFpP07Nspo6U17l0YhFiFpxxU4pTk3Lifz9R3zsIsu
ERwta7+fWIfxOo208ett/jhskiVodSEt3QBGh4XBipyWopKwZ93HHaDVZAALi/2A
+xTBtWdEo7XGUujKDvC2/aZKukfjpOiUI8AhLAfjmlcD/UZ1QPh0mHsglRNCmpCw
mwSXA9VNmhz+PiB+Dml4WWnKW/VHo2ujTXxq7+efMU4H2fny3Se3KYOsFPFGZ1TN
QSYlFuShWrHPtiLmUdPoP6CV2mML1tk+l7DIIqXrQhLUKDACeM5roMx0kLhUWB8P
+0uj1CNlNN4JRZlC7xFfqiMbFRU9Z4N6YwIDAQAB
-----END RSA PUBLIC KEY-----
"""
Теперь, когда вы отобразите это в отладчике, вы увидите представленные там символы \n
, но это всего лишь артефакт того, как отладчик представляет невидимые символы. Будьте уверены, что это действительно символы новой строки.
Новая строка в конце последней строки была неправильной, соответственно отредактировал вопрос.
Многострочный строковый литерал с """ работал нормально - спасибо!
Вы уверены, что дело не в том, как отладчик показывает строку? Что вы получите, если сделаете
print(self.pubKey)
?