我想在便携式C#类中实现这个逻辑:
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
if (ModelState.IsValid)
{
if (MembershipService.ValidateUser(model.UserName, model.Password))
{
SetupFormsAuthTicket(model.UserName, model.RememberMe, model.Password);
if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
&& !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
{
return Redirect(returnUrl);
}
return RedirectToAction("Index", "Home");
}
ModelState.AddModelError("", "The user name or password provided is incorrect.");
}
// If we got this far, something failed, redisplay form
return View(model);
}
但便携式中不存在public void UpdateUser(User user)
{
var usrEntry = Users.FirstOrDefault(x => x.UserId == user.UserId);
usrEntry.IsActive = user.IsActive;
usrEntry.Block = user.Block;
SaveChanges();
var data = GetRolesDb();
}
,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); } } }
};
}
和HMACSHA256
库。
首先我尝试使用https://github.com/AArnott/PCLCrypto
但我总是得到:HMACSHA384
我检查了代码然后我看到Crpyto for PCL没有实现并且总是抛出异常
然后我找到了这个库: https://github.com/onovotny/BouncyCastle-PCL
但是没有文档如何使用它。有人可以给我一个例子来实现
HMACSHA512
使用BouncyCastle-PCL。
答案 0 :(得分:4)
为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;
}
}
其他两个应该是同样的......
答案 1 :(得分:0)
这只是一个跟进,因为它出现在Google上。 PCLCrypto库确实实现了所有哈希方法,但不在PCL dll中实现。 PCL dll只是一个存根,实际的实现是在特定于平台的DLL中。
请确保您从所有项目中引用PCLCrypto库,而不仅仅是PCL库。
该技术称为诱饵和开关,因为它允许最终应用程序使用系统特定的加密apis(以提高性能)