我正在尝试将加密的邮件传递给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等....
答案 0 :(得分:1)
好的,您使用的“密码术”抽象仅支持由于某种原因加密字符串。因此,如果您想使用SimpleAes
,则需要将对象序列化为字符串,以便可以使用SimpleAes
对其进行加密。
然后,当您解密时,您需要将加密的字符串解密回清除字符串,然后将清除字符串反序列化回类实例。
一旦对象属性为encrypted,您就无法访问它们。所有数据都应该被加扰,如果没有密钥和解密算法,应该很难将其更改回来,或者插入其含义。
这与encoding或serialization不同。