控件中国网现已改版,您看到的是老版本网站的镜像,系统正在为您跳转到新网站首页,请稍候.......
中国最专业的商业控件资讯网产品咨询电话:023-67870900 023-67871946
产品咨询EMAIL:SALES@COMPONENTCN.COM

Silverlight中非对称加密及数字签名RSA算法的实现(三)

作者:葡萄城 出处:葡萄城 2010年09月01日 阅读:

3,数字签名和验证
    私钥签名数据m时,先对m进行hash计算,得到计算结果h。然后将h使用私钥加密,得到加密后的密文s即为签名。
    公钥验证签名s时,先将m进行hash计算,得到计算结果h。然后使用公钥解密s得到结果h’。如果h==h’即验证成功,否则验证失败。

    在某些情况下,也会使用公钥签名->私钥验证。原理和私钥签名->公钥验证一样。

    下面是私钥签名->公钥验证的实现。 

public static byte[] Sign(byte[] data, RSAPublicKey publicKey, HashAlgorithm hash)
       {
           if (data == null)
           {
               throw new ArgumentNullException("data");
           }

           if (publicKey == null)
           {
               throw new ArgumentNullException("publicKey");
           }

           if (hash == null)
           {
               throw new ArgumentNullException("hash");
           }

           byte[] hashData = hash.ComputeHash(data);
           byte[] signature = Encrypt(hashData, publicKey);
           return signature;
       }

       public static bool Verify(byte[] data, RSAPrivateKey privateKey, HashAlgorithm hash, byte[] signature)
       {
           if (data == null)
           {
               throw new ArgumentNullException("data");
           }

           if (privateKey == null)
           {
               throw new ArgumentNullException("privateKey");
           }

           if (hash == null)
           {
               throw new ArgumentNullException("hash");
           }

           if (signature == null)
           {
               throw new ArgumentNullException("signature");
           }

           byte[] hashData = hash.ComputeHash(data);
           byte[] signatureHashData = Decrypt(signature, privateKey);

           if (signatureHashData != null && signatureHashData.Length == hashData.Length)
           {
               for (int i = 0; i < signatureHashData.Length; i++)
               {
                   if (signatureHashData[i] != hashData[i])
                   {
                       return false;
                   }
               }
               return true;
           }

           return false;
       }

下面是公钥签名->私钥验证的实现。
public static byte[] Sign(byte[] data, RSAPrivateKey privateKey, HashAlgorithm hash)
        {
            if (data == null)
            {
                throw new ArgumentNullException("data");
            }

            if (privateKey == null)
            {
                throw new ArgumentNullException("privateKey");
            }

            if (hash == null)
            {
                throw new ArgumentNullException("hash");
            }

            byte[] hashData = hash.ComputeHash(data);
            byte[] signature = Encrypt(hashData, privateKey);
            return signature;
        }

        public static bool Verify(byte[] data, RSAPublicKey publicKey, HashAlgorithm hash, byte[] signature)
        {
            if (data == null)
            {
                throw new ArgumentNullException("data");
            }

            if (publicKey == null)
            {
                throw new ArgumentNullException("publicKey");
            }

            if (hash == null)
            {
                throw new ArgumentNullException("hash");
            }

            if (signature == null)
            {
                throw new ArgumentNullException("signature");
            }

            byte[] hashData = hash.ComputeHash(data);

            byte[] signatureHashData = Decrypt(signature, publicKey);

            if (signatureHashData != null && signatureHashData.Length == hashData.Length)
            {
                for (int i = 0; i < signatureHashData.Length; i++)
                {
                    if (signatureHashData[i] != hashData[i])
                    {
                        return false;
                    }
                }
                return true;
            }

            return false;
        }

 

热推产品

  • ActiveReport... 强大的.NET报表设计、浏览、打印、转换控件,可以同时用于WindowsForms谀坔攀戀Forms平台下......
  • AnyChart AnyChart使你可以创建出绚丽的交互式的Flash和HTML5的图表和仪表控件。可以用于仪表盘的创......
首页 | 新闻中心 | 产品中心 | 技术文档 | 友情连接 | 关于磐岩 | 技术支持中心 | 联系我们 | 帮助中心 Copyright-2006 ComponentCN.com all rights reserved.重庆磐岩科技有限公司(控件中国网) 版权所有 电话:023 - 67870900 传真:023 - 67870270 产品咨询:sales@componentcn.com 渝ICP备12000264号 法律顾问:元炳律师事务所 重庆市江北区塔坪36号维丰创意绿苑A座28-5 邮编:400020
在线客服
在线客服系统
在线客服
在线客服系统