0

我目前正在尝试将加密消息传递给 msmq 并且已经能够加密正文中的某些字段,例如用户名和密码,这要归功于以下链接Simple insecure two-way "obfuscation" for C#

请参阅以下代码:

var simpleAes = new SimpleAES();

            var a = new AddToBasketView
            {
                Url = simpleAes.EncryptToString(retailerProduct.DeepLink),
                RetailerProductId = retailerProduct.Id,
                RetailerId = retailerProduct.RetailerId,
                Password = simpleAes.EncryptToString((form["Password"])),
                Username = simpleAes.EncryptToString(form["Username"])
            };
            a.RetailerProduct = _retailerProductRepository.GetRetailerProduct(a.RetailerProductId);
  msgQ.Send(a);

但我真正想做的是加密整个消息。正文

所以我尝试了以下

 msgQ.Send(simpleAes.EncryptToString(a.ToString()));

这会加密身体,但是当我来解密它时,我的代码期望一个对象它失败了 - 我不知道如何处理这个问题。

这是我在解密用户名和密码时使用的代码:

  var message = _msgQ.Receive(); // this should be synchronous and block until we receive

        // Is the message we have an empty message or a message?
        if (message != null)
        {


            #region decrypt paword and username
            var simpleAes = new SimpleAES();


            var addToBasketView = (AddToBasketView)message.Body;

            addToBasketView.Password = simpleAes.DecryptString(addToBasketView.Password);
            addToBasketView.Username = simpleAes.DecryptString(addToBasketView.Username);

            #endregion  decrypt paword and username

如果我将 (AddToBasketView)message.Body 作为字符串传递,我该如何解密它?

编辑:

所以问题是,如果我加密对象 aa,我必须将其转换为字符串:

msgQ.Send(simpleAes.EncryptToString(a.ToString()));

当我来解密它时,我需要它是一个对象而不是字符串,所以我可以使用它ieaurl a.password a.retailerid 等....

4

1 回答 1

1

好的,由于某种原因,您使用的“密码学”抽象仅支持加密字符串。所以,如果你想使用,SimpleAes你需要将你的对象序列化为一个字符串,以便你可以使用SimpleAes它来加密它。

然后,当您解密时,您需要将加密字符串解密回明文字符串,然后将明文字符串反序列化回类实例。


一旦对象被加密,您就无法访问它的属性。所有数据都应该被加扰,如果没有密钥和解密算法,很难将其改回或解释其含义。

这与编码序列化不同。

于 2012-09-03T14:24:18.737 回答