zoukankan      html  css  js  c++  java
  • 代码

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;

    namespace SoftwareProtect
    {
    class MD5Hash
    {
    private static List<byte> inputList;
    private static int curI = 0;
    private static int F(int x, int y, int z)
    {
    return (x & y) | ((~x) & z);
    }
    private static int G(int x, int y, int z)
    {
    return (x & z) | ((~z) & y);
    }
    private static int H(int x, int y, int z)
    {
    return (x ^ y ^ z);
    }
    private static int I(int x, int y, int z)
    {
    return y ^ (x | (~z));
    }
    private static int T(int i)
    {
    return Convert.ToInt32(Math.Pow(2, 16) * Math.Abs(Math.Sin(i)));
    }
    private static int Mj(int i, int j)
    {
    byte[] x = new byte[4];
    x[0] = inputList[i * 16 * 4 + j * 4];
    x[1] = inputList[i * 16 * 4 + j * 4 + 1];
    x[2] = inputList[i * 16 * 4 + j * 4 + 2];
    x[3] = inputList[i * 16 * 4 + j * 4 + 3];
    return BitConverter.ToInt32(x, 0);
    }

    private static int FF(int a, int b, int c, int d, int mj, int s, int i)
    {
    return b + ((a + F(b, c, d) + Mj(curI,mj) + T(i))) << s;
    }
    private static int GG(int a, int b, int c, int d, int mj, int s, int i)
    {
    return b + ((a + G(b, c, d) + Mj(curI, mj) + T(i))) << s;
    }
    private static int HH(int a, int b, int c, int d, int mj, int s, int i)
    {
    return b + ((a + H(b, c, d) + Mj(curI, mj) + T(i))) << s;
    }
    private static int II(int a, int b, int c, int d, int mj, int s, int i)
    {
    return b + ((a + I(b, c, d) + Mj(curI, mj) + T(i))) << s;
    }
    private static int str2int(string str)
    {
    int r = 0;
    byte[] bytes = System.Text.Encoding.Default.GetBytes(str);
    foreach (byte b in bytes)
    {
    r = r + Convert.ToInt32(b);
    }
    return r;
    }
    private static int[] f1(int A, int B, int C, int D)
    {
    A = FF(A, B, C, D, 0, 7, 1);
    D = FF(D, A, B, C, 1, 12, 2);
    C = FF(C, D, A, B, 2, 17, 3);
    D = FF(B, C, D, A, 3, 22, 4);
    A = FF(A, B, C, D, 4, 7, 5);
    D = FF(D, A, B, C, 5, 12, 6);
    C = FF(C, D, A, B, 6, 17, 7);
    D = FF(B, C, D, A, 7, 22, 8);
    return new int[4] { A, B, C, D };
    }
    private static int[] g1(int A, int B, int C, int D)
    {
    A = GG(A, B, C, D, 1, 5, 17);
    D = GG(D, A, B, C, 6, 9, 18);
    C = GG(C, D, A, B, 11, 14, 19);
    D = GG(B, C, D, A, 0, 20, 20);
    A = GG(A, B, C, D, 5, 5, 21);
    D = GG(D, A, B, C, 10, 9, 22);
    C = GG(C, D, A, B, 15, 14, 23);
    D = GG(B, C, D, A, 4, 20, 24);
    return new int[4] { A, B, C, D };
    }
    private static int[] h1(int A, int B, int C, int D)
    {
    A = HH(A, B, C, D, 5, 4, 33);
    D = HH(D, A, B, C, 8, 11, 34);
    C = HH(C, D, A, B, 11, 16, 35);
    D = HH(B, C, D, A, 3, 22, 4);
    A = HH(A, B, C, D, 4, 7, 5);
    D = HH(D, A, B, C, 5, 12, 6);
    C = HH(C, D, A, B, 6, 17, 7);
    D = HH(B, C, D, A, 7, 22, 8);
    return new int[4] { A, B, C, D };
    }
    private static int[] i1(int A, int B, int C, int D)
    {
    A = II(A, B, C, D, 0, 7, 1);
    D = II(D, A, B, C, 1, 12, 2);
    C = II(C, D, A, B, 2, 17, 3);
    D = II(B, C, D, A, 3, 22, 4);
    A = II(A, B, C, D, 4, 7, 5);
    D = II(D, A, B, C, 5, 12, 6);
    C = II(C, D, A, B, 6, 17, 7);
    D = II(B, C, D, A, 7, 22, 8);
    return new int[4] { A, B, C, D };
    }

    public static byte[] ToBytes(int v)
    {

    var len = 4;
    /*for (var i = 0; i < 4; i++)
    {
    if (v >> 8 * i < 255)
    {
    len = i + 1;
    break;
    }
    }*/
    var bs = new byte[len];

    for (var j = 0; j < bs.Length; j++)
    {
    bs[j] = (byte)(v >> (bs.Length - j - 1) * 8);

    }
    return bs;
    }

    public static string ToHexString(byte[] bytes)
    {
    string hexString = string.Empty;

    if (bytes != null)
    {

    StringBuilder strB = new StringBuilder();

    for (int i = 0; i < bytes.Length; i++)
    {
    strB.Append(bytes[i].ToString("X2"));
    }

    hexString = strB.ToString();

    } return hexString;

    }

    public static string getFetures(string input, string md5)
    {
    byte[] inputByte = System.Text.Encoding.Default.GetBytes(input);
    inputList = new List<byte>(inputByte);
    int len = inputByte.Length;
    int yu = len % 64;


    for (int i = 0; i < 56 - yu; i++)
    {
    if (i == 0)
    inputList.Add((byte)(1));
    else
    inputList.Add((byte)(0));
    }

    Int64 len64 = Convert.ToInt64(len);

    inputList.Add((byte)(len64 >> 56));

    inputList.Add((byte)(len64 >> 48));
    inputList.Add((byte)(len64 >> 40));
    inputList.Add((byte)(len64 >> 32));
    inputList.Add((byte)(len64 >> 24));
    inputList.Add((byte)(len64 >> 16));
    inputList.Add((byte)(len64 >> 8));
    inputList.Add((byte)len64);
    int N = inputList.Count;
    int A, B, C, D;
    int[] gr1, gr2, gr3, gr4;
    string rr = "";

    if (N == 64)
    {
    curI = 0;
    A = str2int(md5.Substring(0, 8));
    B = str2int(md5.Substring(8, 8));
    C = str2int(md5.Substring(16, 8));
    D = str2int(md5.Substring(24, 8));

    gr1 = f1(A, B, C, D);
    gr2 = g1(gr1[0], gr1[1], gr1[2], gr1[3]);
    gr3 = h1(gr2[0], gr2[1], gr2[2], gr2[3]);
    gr4 = i1(gr3[0], gr3[1], gr3[2], gr3[3]);

    rr = ToHexString(ToBytes(gr4[0]))+ ToHexString(ToBytes(gr4[1])) + ToHexString(ToBytes(gr4[2])) + ToHexString(ToBytes(gr4[3]));

    string by = null;
    for (int o = 0; o < ToBytes(gr4[2]).Length; o++)
    {

    by += ToBytes(gr4[2])[o];
    }
    MessageBox.Show("by=" + by, "1");
    }
    else
    {
    for (int i = 0; i < N / (16*4) - 1; i++)
    {
    curI = i;
    A = str2int(md5.Substring(0, 8));
    B = str2int(md5.Substring(8, 8));
    C = str2int(md5.Substring(16, 8));
    D = str2int(md5.Substring(24, 8));

    gr1 = f1(A, B, C, D);
    gr2 = g1(gr1[0], gr1[1], gr1[2], gr1[3]);
    gr3 = h1(gr2[0], gr2[1], gr2[2], gr2[3]);
    gr4 = i1(gr3[0], gr3[1], gr3[2], gr3[3]);

    rr = ToHexString(ToBytes(gr4[0])) + ToHexString(ToBytes(gr4[1])) + ToHexString(ToBytes(gr4[2])) + ToHexString(ToBytes(gr4[3]));
    }
    }

    //if (string.Compare(rr, MD5Util.rHandler(rr)) == 0)
    //{
    // return MD5Util.rHandler(rr);
    // }
    // else
    // { Environment.Exit(0); }

    return MD5Util.rHandler(rr);
    }
    }
    }

    public static string rHandler(string s)
    {
    if (s.Length < 32)
    {
    s = s + getR(32 - s.Length, true, false, true, false);
    }
    else if (s.Length > 32)
    {
    s = s.Substring(0, 32);
    }
    return s;
    }

  • 相关阅读:
    理解全虚拟、半虚拟以及硬件辅助的虚拟化
    使用PowerShell向SharePoint中写入数据
    Python的时间模块小结(转自:不懂真人)
    Windows下如何安装Python的第三方库
    Python的正则表达式笔记
    PG, Pool之间的一些数量关系
    Ceph与OpenStack的Nova相结合
    rbd命令
    rados命令
    ceph命令
  • 原文地址:https://www.cnblogs.com/20135314ZHU/p/6965344.html
Copyright © 2011-2022 走看看