我正在尝试使用 Rsa 加密(node-forge)以角度加密请求体,并在 ASP.NET Core 6 中解密它

问题描述 投票:0回答:1

我正在尝试使用 RSA 加密(node-forge)在 Angular 中加密请求正文,并在 ASP.NET Core 6 中对其进行解密。解密时,我无法获取解密的正文,只能得到

[object object ]
作为输出。我尝试使用 pem 阅读器阅读它,但这也不起作用。

import { Injectable } from '@angular/core';
import * as Forge from 'node-forge';

@Injectable({
  providedIn: 'root',
})
export class RSA {
  publicKey: string =`-----BEGIN PUBLIC KEY-----
  MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArHQ09caWERhxf9deHJr2
  AXwBUQuUdmjuZRRTAvkx+VkytEdycTgt8wNR53jjCCSeyK4EeeU04nzoTW6Sqh77
  gTK3T9rPy6QPjD7IrFNZeLwwDfy5SFe9G2vzbJ1geyMgSdBAMITOXK9cdAnsCC40
  dNfPKly3BCf2SI+6Z3zJXghJZfKa2iucGrpW1Jwnxdwbtf7gzYBwmdu7lCz7o93F
  pc3Wd7vCCsjl+PafasuGBPPRhqwuo4fbNuTM6D0oaXWd6Y9HoQ6BanortLotoCXO
  WPCJxqyAU52V1H4lgxP8bgYPZFGRrrabgbqsvDivohSxj4xd822LleF7VZD9Gtos
  UQIDAQAB
  -----END PUBLIC KEY-----`;

  constructor() {}

  encryptWithPublicKey(valueToEncrypt: string): string {
     const scheme={
    name: 'RSA-OAEP',
    hash:'sha256'
    
  };
    const rsa = Forge.pki.publicKeyFromPem(this.publicKey);
    const encryptedBytes = rsa.encrypt(valueToEncrypt.toString(),'RSA-OAEP');
    return window.btoa(encryptedBytes);
  }
}

我尝试将其转换为字符串,但得到了

object object

using Microsoft.AspNetCore.Cors;

using System.Security.Cryptography;
using System.Text;

namespace DotNetServer.Middleware
{
    [EnableCors("_myAllowSpecificOrigins")]
   
    public class Middleware
    {
        private readonly RequestDelegate _next;
        static string privateKey = @"-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEArHQ09caWERhxf9deHJr2AXwBUQuUdmjuZRRTAvkx+VkytEdy
cTgt8wNR53jjCCSeyK4EeeU04nzoTW6Sqh77gTK3T9rPy6QPjD7IrFNZeLwwDfy5
SFe9G2vzbJ1geyMgSdBAMITOXK9cdAnsCC40dNfPKly3BCf2SI+6Z3zJXghJZfKa
2iucGrpW1Jwnxdwbtf7gzYBwmdu7lCz7o93Fpc3Wd7vCCsjl+PafasuGBPPRhqwu
o4fbNuTM6D0oaXWd6Y9HoQ6BanortLotoCXOWPCJxqyAU52V1H4lgxP8bgYPZFGR
rrabgbqsvDivohSxj4xd822LleF7VZD9GtosUQIDAQABAoIBAFnrjeHJVl47nJLI
PW407qj/e8BChXroY8WYv2ABh6k4dVPDHU0jufHIfWBwjBCm55RECFl2xgiCkK4v
RZIm7YUEaMjekxLfzKuX4RLZswFdPsFMUWADP7uYoii0NqZ+Pku+pnmmBeQWG+L1
eXkafoeeL4srJNKp86UKLGvhiS3Zz9QgvJKw2nYoe901Jh+nngzhO9MaTGWLgJa0
4aTMQCZ8qdA1gG6gQ9W9UnVEY7m8CzkSyXFXz/JlvZ/WY8Wl7PM9+2ovl4np5S4Z
MaPBJvVm0/W22MsNDMo6fo8/yiGLu72QyY4X8zQVPp5rtPA1tYr9UcEnhi16AHvz
DDUaoHECgYEA6sP2fzqYWisJz+d+deZXmcT2CUCscJJAeXmyH+DZreEJFmF2D+SH
Vx1+dcPSDFjfKgmL3u9l0A4gw4jVz3J64QulZtL/DhNKCj6/NFAjfd2lKx1pcHW3
ZOkiMES1FxWPcj7SVkG/PDSetDRQu3mLUwWytch2fwCEGaSLJ6Q45ucCgYEAvA1o
q29KCrdcfLH0lh5X58MxHHCGNkT6S2gFY44r8MrQy2Cu3zepQIp+EIVzfVeUALgk
7+5gqbkZf+gUKihSIRg0n6CjplTesJQrGfA/IAmPUpSvKSTYUWhxYLgD6JoTNPHc
jZIsQKz3objDZmO6zNaaEDiuDo3AhkufBOYFxAcCgYEApAyz30wu0jNo8+MsN27y
n/1GgEi1NyS78SbdFfGlqx+pnf4U5h4nhPSTPe/Mg9xGdbWeC/b2CmEU/A5Oelvh
Cgl9V1Dx8gAAqRAXxJKLepS7qlkvKOrZcKaIwXoBoVPrnUXQ7X2cCJIspHg6Qgc5
GJbOvsCKLU1LAjA9HUJgkNkCgYEAjunp2A+Vx5seMK3VYZjh2YKf+isR9IBrb484
OTa88hxQnZ92hrF4cVJPCCNDZ8h89Cb9+1HAKHxBgtFPMdK+x+Prajzc4fWx36Rb
NTU95A0f3PSeQbh8pTGoqIZwgf9GBYChyv2BoA1TjJYr+c5lEnMtVpKcxPa5j9Y8
na5qR1UCgYEAiA4bqKD7cJy2GfNokZhxjej8Y9QGf8fKL4rhh3aIl4diQgUfi+1F
12McPmlwsvfnsuIdGkt/eDdp0Phr/smYbEmKniYQBcHmLc97OH99TyNzySMVeZ5R
rWP1WXLkWOeDOzpuZwKrUuXTDvHJfCsEqmlEujUWeGXxOVN/aOFZI2s=
-----END RSA PRIVATE KEY-----";

       public Middleware(RequestDelegate next)
       {
           _next = next;
       }

       public async Task Invoke(HttpContext httpContext)
       {
            if (httpContext.Request.Method == "POST")
            {
                try 
                {
                    HttpRequest request = httpContext.Request;

                    using (StreamReader reader = new StreamReader(request.Body))
                    {
                        string cypherText = await reader.ReadToEndAsync();
                        byte[] bytesCypherText = Convert.FromBase64String(cypherText);

                        RSA rsa = RSA.Create();
                        rsa.ImportFromPem(privateKey);

                        byte[] decryptedBytes = rsa.Decrypt(bytesCypherText,RSAEncryptionPadding.OaepSHA256);
                        string decryptedText = Encoding.UTF8.GetString(decryptedBytes) ;
                    
                        Console.WriteLine(decryptedText);

                        httpContext.Request.Body = new MemoryStream(decryptedBytes);
                        httpContext.Request.ContentLength = decryptedBytes.Length;
                    }

                    await _next(httpContext);
                }
                catch (Exception e )
                {
                    e.ToString();
                    throw;
                }
            }
            else
            {
                await _next(httpContext);
            }
        }
    }
}
angular asp.net-core cryptography middleware tls1.2
1个回答
0
投票

我也遇到了这个问题,不知所措,我找到了解决方案。加密之前使用 JSON.stringify(valueToEncrypt) 将 json 转换为字符串。

© www.soinside.com 2019 - 2024. All rights reserved.