/// <summary> /// CRC32のハッシュからからハッシュテキストを返す。 /// </summary> /// <param name="hash">CRC32</param> /// <returns>ハッシュテキスト</returns> public static string ComputeHashIds(long hash) { //// hashidsでhashを算出する。 HashidsNet.Hashids hashids = new HashidsNet.Hashids(Salt, 0, Alphabet); var result = hashids.EncodeLong(hash); return(result); }
/// <summary> /// テキストからHashを返す。 /// </summary> /// <param name="text">テキスト</param> /// <returns>Hash</returns> public static string ComputeHashX(string text) { string result = string.Empty; byte[] bytes = Encoding.UTF8.GetBytes(text.Replace("-", string.Empty)); //// テキストのCRC32を計算する。 long crc = Crc32Algorithm.Compute(bytes); //// Encodeの入力は正の整数が必要なため絶対値を取る。 crc = Math.Abs(crc); //// hashidsでhashを算出する。 HashidsNet.Hashids hashids = new HashidsNet.Hashids(Salt, 0, Alphabet); result = hashids.EncodeLong(crc); return(result); }
public string GenerateAccessToken(string authSecret, User user, DateTime accessTokenExpiration) { DateTimeOffset dto = new DateTimeOffset(DateTime.UtcNow, TimeSpan.Zero); var unixDate = dto.ToUnixTimeMilliseconds(); var hashIds = new HashidsNet.Hashids(salt: Salt.IdSalt); var userCode = hashIds.EncodeLong(unixDate, user.Id); var claims = new[] { new Claim("userId", userCode), }; var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(authSecret)); var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); var token = new JwtSecurityToken(claims: claims, expires: accessTokenExpiration, signingCredentials: creds); return(new JwtSecurityTokenHandler().WriteToken(token)); }
/// <summary> /// 分配一个新的全局唯一ID /// </summary> /// <returns></returns> public static string NewGUID() { return(hashIds.EncodeLong(serverId, DateTime.UtcNow.Ticks - 636503616000000000L, System.Threading.Interlocked.Increment(ref conTick))); // 636503616000000000 = ticks of 2018-01-01 00:00:00 }
/// <summary> /// 分配一个新的全局唯一ID /// </summary> /// <returns></returns> public static string NewGUID() { return(hashIds.EncodeLong(serverId, DateTime.UtcNow.Ticks - 636503616000000000L)); // 636503616000000000 = ticks of 2018-01-01 00:00:00 }
public void RoundtripLongs() { var encodedValue = _hashids.EncodeLong(_longs); var decodedValue = _hashids.DecodeLong(encodedValue); }