c# 數字ID與可見字串碼互轉的一種實現
阿新 • • 發佈:2018-11-05
c# 數字ID與可見字串碼互轉的一種實現
適用場景:有時使用者id等之類的欄位用的是int型別,但在有些時候不想讓這個id暴露,於是可以考慮把這個id轉換成一個字串,而且要可根據這個字串得到相應的id值
實現如下程式碼:
using System; using System.Data; using System.Linq; using System.Security.Cryptography; using System.Text; namespace My.Common { /// <summary> /// 使用者公共類 /// </summary> public static class User { /// <summary> /// 加密物件 /// </summary> private static readonly ICryptoTransform Encryptor; /// <summary> /// 解密物件 /// </summary> private static readonly ICryptoTransform Decryptor; static User() { #region 加密解密初始化 //此處key要改成自己的 const string key = "TEST2CDCA1CAEA1234D84FBDE3TEST22"; var cryp = new TripleDESCryptoServiceProvider { Key = Encoding.ASCII.GetBytes(key.Substring(0, 24)), IV = Encoding.ASCII.GetBytes(key.Substring(24, 8)), Mode = CipherMode.ECB, Padding = PaddingMode.PKCS7 }; Encryptor = cryp.CreateEncryptor(); Decryptor = cryp.CreateDecryptor(); #endregion } } /// <summary> /// 獲取使用者CODE /// </summary> /// <returns></returns> public static string GetUserCodeV2(int userId) { var data = BitConverter.GetBytes(userId); //4個位元組 data = Encryptor.TransformFinalBlock(data, 0, data.Length);//加密後8個位元組 var bs = new byte[9];//避免BASE64後最後一位會為= bs[0] = (byte)(userId % 256);//生成一個位元組 補滿9個位元組 data.CopyTo(bs, 1); var strBase1 = Convert.ToBase64String(bs); //上面base64出來的字串中可能會含有 "+" "/",再次base64會沒有 return strBase1.Base64Encode(); } /// <summary> /// 獲取使用者ID /// </summary> /// <returns></returns> public static int GetUserIdV2(string code) { try { var baseCode = code.Base64Decode(); var bs = Convert.FromBase64String(baseCode); return BitConverter.ToInt32(Decryptor.TransformFinalBlock(bs, 1, bs.Length - 1), 0); } catch { return 0; } } } }
--- end ---