src/Library/NetPro.RabbitMQ/AuthUtil/AliyunUtils.cs
(开头部分) 2KB这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。
using System;
using System.Security.Cryptography;
using System.Text;
namespace MQMiddleware.AuthUtil
{
public static class AliyunUtils
{
internal static readonly int FROM_USER = 0;
internal static readonly string COLON = ":";
internal static readonly DateTime EPOCH_START = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
public static string getUserName(string ak, string resourceOwnerId)
{
StringBuilder data = new StringBuilder(64);
data.Append(FROM_USER).Append(COLON).Append(resourceOwnerId).Append(COLON).Append(ak);
return Convert.ToBase64String(Encoding.UTF8.GetBytes(data.ToString()));
}
public static string getUserName(string ak, string resourceOwnerId, string stsToken)
{
StringBuilder data = new StringBuilder(64);
data.Append(FROM_USER).Append(COLON).Append(resourceOwnerId).Append(COLON).Append(ak).Append(COLON).Append(stsToken);
return Convert.ToBase64String(Encoding.UTF8.GetBytes(data.ToString()));
}
public static string getPassword(string sk)
{
TimeSpan ts = DateTime.UtcNow - EPOCH_START;
long timestamp = Convert.ToInt64(ts.TotalMilliseconds);
KeyedHashAlgorithm algorithm = KeyedHashAlgorithm.Create("HMACSHA1");
if (null == algorithm)
{
throw new InvalidOperationException("HMACSHA1 not exist!");
}
try
{
algorithm.Key = Encoding.UTF8.GetBytes(timestamp.ToString());
byte[] bytes = algorithm.ComputeHash(Encoding.UTF8.GetBytes(sk));
string signature = byteArrayToUpperString(bytes);
// Console.WriteLine(signature);
StringBuilder data = new StringBuilder(64);
data.Append(signature).Append(COLON).Append(timestamp);
return Convert.ToBase64String(Encoding.UTF8.GetBytes(data.ToString()));
}
finally
{
algorithm.Clear();
}
}
private static string byteArrayToUpperString(byte[] bytes)
{
if (bytes == null)
{
throw new ArgumentNullException("bytes array null");
}
后面还有 9 行代码,解锁后查看完整代码
24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明
AI 解读 AI
登录后可用,每次 10 算力,解读结果公开显示在下面。
还没有人解读过这个文件。