加密后将字符串转换回对象或执行此操作的方法

时间:2012-09-03 09:33:27

标签: c# encryption msmq

我正在尝试将加密的邮件传递给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)消息。如果我把它作为字符串传递了吗?

编辑:

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

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

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

1 个答案:

答案 0 :(得分:1)

好的,您使用的“密码术”抽象仅支持由于某种原因加密字符串。因此,如果您想使用SimpleAes,则需要将对象序列化为字符串,以便可以使用SimpleAes对其进行加密。

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


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

这与encodingserialization不同。