常用加密算法:C#中的常用加密算法和其它语言的兼容性

  1:MD5

  以前在asp时代常用MD5算法好象是从动网流出来后来大家都用它基本上有两种,区别在md5.asp结尾部分

  MD5 = LCase(WordToHex(a) & WordToHex(b) & WordToHex(c) & WordToHex(d))

  MD5=LCase(WordToHex(b) & WordToHex(c)) 

  分别对应32位和16位加密方式

  在C#中对应实现为

/// <summary>
    /// 16位MD5加密思路方法,以前DVBBS所使用
    /// </summary>
    /// <param name="strSource">待加密字串</param>
    /// <s>加密后字串</s>
    public MD5Encrypt( strSource)
    {
       MD5Encrypt(strSource, 16);
    }
    /// <summary>
    /// MD5加密,和动网上16/32位MD5加密结果相同
    /// </summary>
    /// <param name="strSource">待加密字串</param>
    /// <param name="length">16或32值的,其它则采用.net默认MD5加密算法</param>
    /// <s>加密后字串</s>
    public MD5Encrypt( strSource, length)
    {
       s = Encoding.ASCII.GetBytes(strSource);
       hashValue = ((.Security.Cryptography.HashAlgorithm).Security.Cryptography.CryptoConfig.CreateFromName("MD5")).ComputeHash(s);
      StringBuilder sb = StringBuilder;
      switch (length)
      {
         16:
          for ( i = 4; i < 12; i)
            sb.Append(hashValue[i].("x2"));
          ;
         32:
          for ( i = 0; i < 16; i)
          {
            sb.Append(hashValue[i].("x2"));
          }
          ;
        default:
          for ( i = 0; i < hashValue.Length; i)
          {
            sb.Append(hashValue[i].("x2"));
          }
          ;
      }


  同样其它语言都实现了DES加密和.netframeworkdes基础实现也不比较郁闷是我刚开始使用.net framework时还真改写过perl版des,后面才发现其实有更简单办法网上流传perl/c/java版des算法都是块加密设置CipherMode为ECB就好了郁闷ing.

  源代码如下

    public DESKey = {0x82, 0xBC, 0xA1, 0x6A, 0xF5, 0x87, 0x3B, 0xE6, 0x59, 0x6A, 0x32, 0x64, 0x7F, 0x3A, 0x2A, 0xBB, 0x2B, 0x68, 0xE2, 0x5F, 0x06, 0xFB, 0xB8, 0x2D, 0x67, 0xB3, 0x55, 0x19, 0x4E, 0xB8, 0xBF, 0xDD };
    /// <summary>
    /// DES加密
    /// </summary>
    /// <param name="strSource">待加密字串</param>
    /// <param name="key">32位Key值</param>
    /// <s>加密后串</s>
    public DESEncrypt( strSource) {
       DESEncrypt(strSource, DESKey);
    }
    public DESEncrypt( strSource, key)
    {
      SymmetricAlgorithm sa = Rijndael.Create;
      sa.Key = key;
      sa.Mode= CipherMode.ECB;
      sa.Padding = PaddingMode.Zeros;
      MemoryStream ms = MemoryStream;
      CryptoStream cs = CryptoStream(ms, sa.CreateEncryptor, CryptoStreamMode.Write);
       byt = Encoding.Unicode.GetBytes(strSource);
      cs.Write(byt, 0, byt.Length);
      cs.FlushFinalBlock;
      cs.Close;
       Convert.ToBase64String(ms.ToArray);
    }
    /// <summary>
    /// DES解密
    /// </summary>
    /// <param name="strSource">待解密字串</param>
    /// <param name="key">32位Key值</param>
    /// <s>解密后串</s>
    public DESDecrypt( strSource) {
       DESDecrypt(strSource, DESKey);
    }
    public DESDecrypt( strSource, key)
    {
      SymmetricAlgorithm sa = Rijndael.Create;
      sa.Key = key;
      sa.Mode = CipherMode.ECB;
      sa.Padding = PaddingMode.Zeros;
      ICryptoTransform ct = sa.CreateDecryptor;
       byt = Convert.FromBase64String(strSource);
      MemoryStream ms = MemoryStream(byt);
      CryptoStream cs = CryptoStream(ms, ct, CryptoStreamMode.Read);
      StreamReader sr = StreamReader(cs, Encoding.Unicode);
       sr.ReadToEnd;
    }


Tags:  md5加密算法 加密算法 常用的加密算法 常用加密算法

延伸阅读

最新评论

发表评论