加密和解密没有特殊字符

Ami*_*Ami 2 asp.net encryption console-application

我想加密邮件ID.加密的邮件ID不应包含特殊字符.我从控制台应用程序发送邮件.在控制台应用程序中,我编码邮件ID并将其附加到将执行我的点击计数的链接中.在Web应用程序中,我正在解码传递的邮件ID.因此,如果加密邮件ID包含特殊字符,则会干扰我的链接.

我使用以下:

    string EncryptedEmailId;
    string EncryptionKey = "MAKV2SPBNI99212";
    byte[] EmailIdEncrypt = Encoding.Unicode.GetBytes(InvEmail);

    using (Aes encryptor = Aes.Create())
    {
          Rfc2898DeriveBytes pdbEncrypt = new Rfc2898DeriveBytes(EncryptionKey, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
          encryptor.Key = pdbEncrypt.GetBytes(32);
          encryptor.IV = pdbEncrypt.GetBytes(16);
          using (MemoryStream msEncrypt = new MemoryStream())
          {
                 using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor.CreateEncryptor(), CryptoStreamMode.Write))
                 {
                         csEncrypt.Write(EmailIdEncrypt, 0, EmailIdEncrypt.Length);
                                    csEncrypt.Close();
                 }
                 EncryptedEmailId = Convert.ToBase64String(msEncrypt.ToArray());
          }
   }
   individualContent = individualContent.Replace("[MailId]", EncryptedEmailId);
Run Code Online (Sandbox Code Playgroud)

Ami*_*Ami 6

借着尼普的暗示,我得到了答案.

a)将字符串转换为十六进制

    public static string ConvertStringToHex(String input, System.Text.Encoding encoding)
    {
         Byte[] stringBytes = encoding.GetBytes(input);
        StringBuilder sbBytes = new StringBuilder(stringBytes.Length * 2);
        foreach (byte b in stringBytes)
         {
             sbBytes.AppendFormat("{0:X2}", b);
        }
        return sbBytes.ToString();
    }
Run Code Online (Sandbox Code Playgroud)

b)将Hex转换为String

     public static string ConvertHexToString(String hexInput, System.Text.Encoding encoding)
    {
         int numberChars = hexInput.Length;
        byte[] bytes = new byte[numberChars / 2];
         for (int i = 0; i < numberChars; i += 2)
        {
            bytes[i / 2] = Convert.ToByte(hexInput.Substring(i, 2), 16);
         }
         return encoding.GetString(bytes);
    }
Run Code Online (Sandbox Code Playgroud)

样本使用代码

    string testString = "MIKA@?&^";
    string hex = ConvertStringToHex(testString, System.Text.Encoding.Unicode);
    string normal = ConvertHexToString(hex, System.Text.Encoding.Unicode);
    Debug.Assert(testString.CompareTo(normal) == 0, "They are not identical");
Run Code Online (Sandbox Code Playgroud)

请看:http://www.nullskull.com/faq/834/convert-string-to-hex-and-hex-to-string-in-net.aspx