[英]Is it possible to convert an integer ( short, int, long ) into a base 64 string ( and vice-versa )?
[英]convert integer into encrypted string and vice versa
我想將pid作為URL中的querystring參數傳遞,但我不想像?pid = 102或?pid = 493這樣的int傳遞,而是要以諸如?pid = D109150A13F0EA4或其他加密字符串之類的加密形式傳遞這些pid。 我嘗試了內置的Encrypt方法,但它們給出了較長的字符串,如?pid = F3D165BAF8D84FB17CF8E5B4A04AC9022BFF5F987A6EDC42D109150A13F0EA4D847527287C8013154E2E8A2D8DAB6B686751C079092713C0D3E2E2E64B
我想要像?pid = D109150A13F0EA4或類似的小字母數字字符串
您是否嘗試過使用Guid
?
var g = Guid.NewGuid(productId.ToString());
它將產生38個字符的結果:8個十六進制數字,然后是三組,每組四個4個十六進制數字,然后是一組12個十六進制數字。
指南的示例: 6B29FC40-CA47-1067-B31D-00DD010662DA
因此,與您的示例相比,它實際上很短。 Guid的唯一缺點是您無法將其解密回int(但是您可以比較兩個Guid是否表示相同的int值)。
如果既需要加密又需要解密,除了內置加密(我假設您在上面的示例中使用了Encrypt
方法)之外, System.Security.Cryptography
命名空間還提供了許多其他加密算法,例如:
對於那些事情,我使用一個小的EncryptDecrypt類,也許對您的方法有所幫助。
像EncryptDecrypt.ToEncrypt(yourstring)
和EncryptDecrypt.ToDecrypt(yourEncryptedString)
這樣的用法。 因此,您應該能夠在添加到查詢字符串之前進行加密。 整數和數字等,然后必須先轉換為字符串。
希望這可以幫助。
using System;
using System.Security.Cryptography;
using System.IO;
namespace YourNameSpace
{
public class EncryptDecrypt
{
#region Declaration
static readonly byte[] TripleDesKey1 = new byte[] { 15, 11, 7, 21, 34, 32, 33, 5, 23, 13, 23, 41, 43, 41, 7, 19, 91, 91, 47, 7, 37, 13, 19, 41 };
static readonly byte[] TripleDesiv1 = new byte[] { 5, 23, 13, 23, 41, 43, 41, 7 };
#endregion
/// <summary>
/// To Encrypt String
/// </summary>
/// <param name="value">String To Encrypt</param>
/// <returns>Returns Encrypted String</returns>
public static string ToEncrypt(string value)
{
TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider
{
Key = TripleDesKey1,
IV = TripleDesiv1
};
MemoryStream ms;
if (value.Length >= 1)
ms = new MemoryStream(((value.Length * 2) - 1));
else
ms = new MemoryStream();
ms.Position = 0;
CryptoStream encStream = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
byte[] plainBytes = System.Text.Encoding.UTF8.GetBytes(value);
encStream.Write(plainBytes, 0, plainBytes.Length);
encStream.FlushFinalBlock();
encStream.Close();
return Convert.ToBase64String(plainBytes);
}
/// <summary>
/// To Decrypt Data Encrypted From TripleDEC Algoritham
/// </summary>
/// <param name="value">String Value To Decrypt</param>
/// <returns>Return Decrypted Data</returns>
public static string ToDecrypt(string value)
{
TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
//System.IO.MemoryStream ms = new System.IO.MemoryStream(((value.Length * 2) - 1));
MemoryStream ms;
if (value.Length >= 1)
ms = new MemoryStream(((value.Length * 2) - 1));
else
ms = new MemoryStream();
ms.Position = 0;
CryptoStream encStream = new CryptoStream(ms, des.CreateDecryptor(TripleDesKey1, TripleDesiv1), CryptoStreamMode.Write);
byte[] plainBytes = Convert.FromBase64String(value);
encStream.Write(plainBytes, 0, plainBytes.Length);
return System.Text.Encoding.UTF8.GetString(plainBytes);
}
}
}
此方法用於生成隨機字符串
private string GetRandomString(int iStringLength)
{
string allowedChars = "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789!@$?_-";
char[] chars = new char[iStringLength];
Random rd = new Random();
for (int i = 0; i < iStringLength; i++)
{
chars[i] = allowedChars[rd.Next(0, allowedChars.Length)];
}
return new string(chars);
}
或使用
var gid = Guid.NewGuid(productId.ToString());
下面的方法加密一個字符串。 只需傳遞一個普通/隨機字符串來加密該字符串即可。
protected string EncryptString(String strString)
{
UnicodeEncoding uEncode = new UnicodeEncoding();
Byte[] bytstrString = uEncode.GetBytes(strString);
SHA256Managed sha1 = new SHA256Managed();
Byte[] hash = sha1.ComputeHash(bytstrString);
return Convert.ToBase64String(hash);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.