Tom*_*Tom 15 c# sha1 portable-class-library
我正在尝试构建一个可移植的类库,为其他类/应用程序生成OAuth URL.这个使用OAuth的类库必须是一个可移植的类库,因此它可以与我正在构建的DropBox API的不同版本一起使用.
此类的一部分需要生成SHA1哈希以生成oauth_signature.
我知道可移植类库不支持System.Security.Cryptography,所以无论如何这个类可以生成没有该类的SHA1哈希?
Glu*_*uip 16
我认为最简单的方法是使用PCLCrypto nuget包.然后你可以这样做:
private static string CalculateSha1Hash(string input)
{
// step 1, calculate MD5 hash from input
var hasher = WinRTCrypto.HashAlgorithmProvider.OpenAlgorithm(HashAlgorithm.Sha1);
byte[] inputBytes = Encoding.UTF8.GetBytes(input);
byte[] hash = hasher.HashData(inputBytes);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hash.Length; i++)
{
sb.Append(hash[i].ToString("X2"));
}
return sb.ToString();
}
Run Code Online (Sandbox Code Playgroud)
好吧我最近也需要这个,我发现从HashLib获取SHA1实现要容易得多:http://hashlib.codeplex.com/
Mono实现有一些远程依赖(异常的本地化等),而从HashLib你只需要复制几个文件而不需要对它们进行任何更改:
Converters.cs
Hash.cs
HashBuffer.cs
HashCryptoNotBuildIn.cs
HashResult.cs
IHash.cs
SHA0.cs
SHA1.cs
Run Code Online (Sandbox Code Playgroud)
总共55 KB的代码,所以没有太重.
我已经使用这个BouncyCastle的NuGet包:https://www.nuget.org/packages/BouncyCastle-PCL/和它工作得很好,我(跨平台的Windows Store应用.NET框架4.5,Silverlight的5,的Windows Phone 8, Xamarin.Android,Xamarin.iOS)
使用HMACSHA1生成如下签名:
public string GenerateSignature(string key, string signatureBase)
{
var keyBytes = Encoding.UTF8.GetBytes(key);
HMACSHA1 hashAlgorithm = new HMACSHA1(keyBytes);
byte[] dataBuffer = Encoding.UTF8.GetBytes(signatureBase);
byte[] hashBytes = hashAlgorithm.ComputeHash(dataBuffer);
return Convert.ToBase64String(hashBytes);
}
Run Code Online (Sandbox Code Playgroud)