使用安当UKEY做登录验证

(windows版)

1,需要安装安当中间件,

2,在前端页面引用usbkey.js,这里含有获取UKEY中得编号,公钥等信息以及存用户信息

(注:使用UKEY之前,需要把UKEY得公钥存到数据库中,与用户对应,也需要把用户得主键存到UKEY中,这里需要单独后台管理员页面操作)

3,在登录过程中,先获取UKEY得主键信息(前端页面获取),把主键信息传到后台,根据主键信息在数据库查询,判断是否有此用户数据。

4,有用户数据时,则可获取用户对应得公钥信息,则进行验签操作

  首先,在前台获取随机数,根据随机数生成得签名(这里生成签名的过程是调用安当的方法生成的),把这两个值传到后台中;

  然后,在后台获取用户的公钥,对其进行验签,只有验签成功才能进行登录。不成功时会有提示。

  其验签操作如下: 

    验签的流程
            1》sha256加密原始随机数(明文)获得摘要
            2》公钥解密  base64解码签名后的数据 获得摘要
            3》比较摘要内容是否相同
    后台需求及代码
      1》在后台需要引入 RSAExtensions   NuGet包
      2》后台代码
      

      byte[] SJS = sha256("随机数");
      string Sha256_abstract = BitConverter.ToString(SJS ); //sha256加密原始随机数(明文)获得摘要 

     
      byte[] sign = Convert.FromBase64String("签名");

      byte[] ret = DecryptByPublicKey(sign, "公钥");

      string PublicKey_abstract= BitConverter.ToString(ret); //公钥解密  base64解码签名后的数据 获得摘要

      最后比对 Sha256_abstract 与PublicKey_abstract即可,相同则说明验签成功。

 

      用到的方法:

      sha256加密方法

      public static byte[] sha256(string data)

      {
        byte[] bytes = Encoding.UTF8.GetBytes(data);
        byte[] hash = SHA256Managed.Create().ComputeHash(bytes);

        return hash;

      }

      RSA公钥解密方法

      private static AsymmetricKeyParameter GetPublicKeyParameter(string s) 
      {
        s = s.Replace("\r", "").Replace("\n", "").Replace(" ", "");
        byte[] publicInfoByte = Convert.FromBase64String(s);
        Asn1Object pubKeyObj = Asn1Object.FromByteArray(publicInfoByte);//这里也可以从流中读取,从本地导入
        AsymmetricKeyParameter pubKey = PublicKeyFactory.CreateKey(publicInfoByte);
        return pubKey;
      }
      public static byte[] DecryptByPublicKey(byte[] byteData, string key)
      {
        //非对称加密算法,加解密用
        IAsymmetricBlockCipher engine = new Pkcs1Encoding(new RsaEngine());
        //解密
        try
        {
          engine.Init(false, GetPublicKeyParameter(key));
          byte[] ResultData = engine.ProcessBlock(byteData, 0, byteData.Length);
          return ResultData;
        }
        catch (Exception ex)
        {
          return null;
        }
      }

      

posted @ 2022-08-24 13:58  zwbsoft  阅读(838)  评论(0编辑  收藏  举报