首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MachineKey在C#中的加解密

MachineKey在C#中的加解密
EN

Stack Overflow用户
提问于 2016-04-23 15:17:57
回答 1查看 5.3K关注 0票数 6

我试图用MachineKey加密和解密Id。

下面是调用加密和解密函数的代码:

代码语言:javascript
复制
 var encryptedId = Encryption.Protect(profileId.ToString(), UserId);
 var decryptedId = Encryption.UnProtect(encryptedId, UserId);

以下是功能:

代码语言:javascript
复制
public static string Protect(string text, string purpose)
{
    if(string.IsNullOrEmpty(text))
    {
        return string.Empty;
    }

    byte[] stream = Encoding.Unicode.GetBytes(text);
    byte[] encodedValues = MachineKey.Protect(stream, purpose);
    return HttpServerUtility.UrlTokenEncode(encodedValues);
}

public static string UnProtect(string text, string purpose)
{
    if(string.IsNullOrEmpty(text))
    {
        return string.Empty;
    }

    byte[] stream = HttpServerUtility.UrlTokenDecode(text);
    byte[] decodedValues = MachineKey.Unprotect(stream, purpose);
    return Encoding.UTF8.GetString(decodedValues);
}

Protect方法的输入为15。这导致encryptedId变量包含以下字符串:6wOttbtJoVBV7PxhVWXGz4AQVYcuyHvTyJhAoPu4Okd2aKhhCGbKlK_T4q3GgirotfOZYZXke0pMdgwSmC5vxg2

为了对此进行加密,我将此字符串作为参数发送到UnProtect方法。解密的结果应该是15,而不是:1\05\0

我不明白为什么。我尝试在这个函数中只使用整数,但是我仍然有同样的问题。解密的输出不同。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-23 15:47:28

如果编码不匹配,则编码一个缓冲区,其中包含字符串的UTF-16 (Encoding.Unicode)表示形式(考虑到该字符串每个字符使用2个字节,这将交织\0 ),但您可以将其解码为UTF-8 (Encoding.UTF8)。在这两种方法中都需要保持一致。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36812592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档