我想在可移植C#类中实现此逻辑:

static JsonWebToken()
        {
            HashAlgorithms = new Dictionary<JwtHashAlgorithm, Func<byte[], byte[], byte[]>>
            {
                { JwtHashAlgorithm.HS256, (key, value) => { using (var sha = new HMACSHA256(key)) { return sha.ComputeHash(value); } } },
                { JwtHashAlgorithm.HS384, (key, value) => { using (var sha = new HMACSHA384(key)) { return sha.ComputeHash(value); } } },
                { JwtHashAlgorithm.HS512, (key, value) => { using (var sha = new HMACSHA512(key)) { return sha.ComputeHash(value); } } }
            };
        }


但是HMACSHA256HMACSHA384HMACSHA512在便携式计算机中不存在
图书馆。

首先,我尝试使用https://github.com/AArnott/PCLCrypto
但我总是得到:An exception of type 'System.NotImplementedException' occurred in PCLCrypto.dll but was not handled in user code

我检查了一下代码,然后发现Crpyto for PCL没有实现,并且总是抛出异常

然后我找到了这个图书馆:
https://github.com/onovotny/BouncyCastle-PCL

但是没有文档说明如何使用它。有人可以给我一个例子如何实现

var sha = new HMACSHA256(key)
var sha = new HMACSHA384(key)
var sha = new HMACSHA512(key)


与BouncyCastle-PCL。

最佳答案

像这样尝试HmacSha256

public class HmacSha256
    {
        private readonly HMac _hmac;

        public HmacSha256(byte[] key)
        {
            _hmac = new HMac(new Sha256Digest());
            _hmac.Init(new KeyParameter(key));
        }

        public byte[] ComputeHash(byte[] value)
        {
            if (value == null) throw new ArgumentNullException("value");

            byte[] resBuf = new byte[_hmac.GetMacSize()];
            _hmac.BlockUpdate(value, 0, value.Length);
            _hmac.DoFinal(resBuf, 0);

            return resBuf;
        }
    }


其他两个应该也一样...

关于c# - 具有BouncyCaSTLe-PCL的C#PCL HMACSHAX,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30974846/

10-11 03:50