Расшифровка серверной части формы сообщения с ошибкой: BadPaddingException

#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 в целом часто называют «медленным»