#javascript #node.js #swift #encryption
#javascript #node.js #swift #шифрование
Вопрос:
Здравствуйте, у меня есть простой закрытый и открытый ключ RSA, я отправляю открытый ключ на серверную часть для шифрования текста и возвращаю зашифрованный текст обратно для расшифровки. Вот код на стороне клиента:
ИНТЕРФЕЙС SWIFT
func createPK(uid: String) {
do {
let keyPair = try SwiftyRSA.generateRSAKeyPair(sizeInBits: 2048)
let privateKey = keyPair.privateKey
let publicKey = keyPair.publicKey
let aa = try publicKey.pemString()
print(aa)
AF.request("http://localhost:5001/cakes-delight/us-central1/encryption", method: .post, parameters: ["publicKey" : aa]).responseJSON { (result) in
if let err = result.error {
print("error req (err)")
return
}
if let statusCode = result.response?.statusCode {
if statusCode != 200 {
print("err: (statusCode)")
return
}
}
if let result = result.value {
if let JSON = result as? NSDictionary {
if let id = JSON["res"] as? String {
do {
print("nnENCRYPTED?: (id)nn")
var k = id
let encrypted = try EncryptedMessage(base64Encoded: k.toBase64())
print("aa")
let clear = try encrypted.decrypted(with: privateKey, padding: .PKCS1)
print("bb")
let string = try clear.string(encoding: .utf8)
print("nnDECRYPTED : (string)nn")
return
} catch let error{
print("failed (error)")
return
}
}
}
}
}
} catch {
print("err")
}
}
Внутренний код TYPESCRIPT:
export const encryption = functions.https.onRequest(async(request, response) => {
try {
console.log(request.body["publicKey"])
// let key = await new NodeRSA('-----BEGIN RSA PUBLIC KEY-----n'
// request.body["publicKey"]
// '-----END RSA PUBLIC KEY-----');
let key = await new NodeRSA(
request.body["publicKey"] );
let v = key.encrypt("i am coco!", "base64")
console.log(v)
let responseJSON = {
res: v
}
response.status(200).send(responseJSON);
} catch (err) {
console.log(err)
}
});
SwiftyRSA выдает мне эту ошибку: «chunkDecryptFailed (индекс: 0)».
Я протестировал свой ключ на веб-сайте шифрования RSA 8gwifi. Я использовал зашифрованное сообщение, поступающее от моего серверной части, и попытался расшифровать его, чтобы получить лучшую ошибку.
Я получаю:
SYSTEM Error Error Performing RSA Encryption javax.crypto.BadPaddingException: Decryption error
Комментарии:
1. Какое дополнение вы использовали на стороне серверной части, интерфейса и 8gwifi? Это причина, по которой большинство RSA en- / decryption терпит неудачу, особенно если не указано никакого заполнения, но используются параметры «по умолчанию».
2. @MichaelFehr привет. я импортирую открытый ключ в nodeRSA, я использую pkcs1-public. я использовал swiftRSA pkcs1 при расшифровке зашифрованного сообщения, отправленного с узла. Я исправил свою проблему, используя swiftRSA (интерфейс) для использования заполнения OAEP для расшифровки. Можете ли вы объяснить, почему это работает?
3. Смотрите Документацию Node-RSA ( github.com/rzcoder/node-rsa/blob/master/README.md ): схема заполнения для шифрования / дешифрования. Может быть ‘pkcs1_oaep’ или ‘pkcs1’. По умолчанию ‘pkcs1_oaep’ — вот почему swiftRSA нужен ‘OEAP’ :-). Приятно прочитать, что вы нашли рабочее решение.
4. @MichaelFehr спасибо. я прочитаю. Считаете ли вы, что использование 2048 rsa для отправки данных json, содержащих личную информацию пользователя в строках между 50-500 символами, хорошей идеей? Я проанализирую информацию для отображения в представлениях. Как вы думаете, это повлияет на работу пользователя?
5. Извините, но у меня нет никакого опыта в такого рода вопросах — я просто пытаюсь помочь в вопросах программирования :-)… но имейте в виду, что RSA en- / decryption в целом часто называют «медленным»