加密查询字符串

时间:2011-02-19 07:33:16

标签: asp.net

我尝试使用查询字符串在另一个页面中发送EmployeeId,但我想以加密格式发送它。

如果有人知道答案,任何帮助都是很有帮助的。

3 个答案:

答案 0 :(得分:1)

来自http://www.infoexpediters.com/SecureQueryString.cs

public string encrypt(string serializedQueryString)
    {
        byte[] buffer = Encoding.ASCII.GetBytes(serializedQueryString);
        TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
        MD5CryptoServiceProvider MD5 = new MD5CryptoServiceProvider();
        des.Key = MD5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(cryptoKey));
        des.IV = IV;
        return Convert.ToBase64String(
            des.CreateEncryptor().TransformFinalBlock(
                buffer,
                0,
                buffer.Length
            )
        );
    }

    public string decrypt(string encryptedQueryString)
    {
        try
        {
            byte[] buffer = Convert.FromBase64String(encryptedQueryString);
            TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
            MD5CryptoServiceProvider MD5 = new MD5CryptoServiceProvider();
            des.Key = MD5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(cryptoKey));
            des.IV = IV;
            return Encoding.ASCII.GetString(
                des.CreateDecryptor().TransformFinalBlock(
                    buffer,
                    0,
                    buffer.Length
                )
            );
        }
        catch (CryptographicException)
        {
            throw new InvalidQueryStringException();
        }
        catch (FormatException)
        {
            throw new InvalidQueryStringException();
        }
    }

答案 1 :(得分:0)

使用POST而非GET,这样在网址中不可见。在发送之前在POST主体上实现一些小加密,并在接收时解密。

我假设你在网页上使用javascript?提供有关您正在使用的语言(php / python等?)的更多信息,以获取更具体(和代码)的内容

答案 2 :(得分:0)

您可能会或可能不会真正需要加密,但假设您这样做,您可以使用三重des(或任何您想要的)在PHP中执行此操作:

// Init mcrypt stuff
$descriptor = mcrypt_module_open('tripledes', '', MCRYPT_MODE_ECB, '');
$key = substr(md5('put your secret here'), 0, mcrypt_enc_get_key_size($descriptor));
$vector = mcrypt_create_iv(mcrypt_enc_get_iv_size($descriptor), MCRYPT_RAND);
mcrypt_generic_init($descriptor, $key, $vector);

// Encrypt id
$encryptedEmployeeId = mcrypt_generic($descriptor, $_GET['EmployeeId']);

// Clean up mcrypt
mcrypt_generic_deinit($descriptor);
mcrypt_module_close($descriptor);

除了使用mdecrypt_generic()之外,反向过程类似。当然,我假设您正在使用PHP:)。