MD5和Hash有什么区别和联系,尽量用简洁的语言描述
Hash是一种特殊的算法,MD5就是其中常用的一种。它的算法的特征是不可逆性,并且才计算的时候所有的数据都参与了运算,其中任何一个数据变化了都会导致计算出来的Hash值完全不同,所以通常用来校验数据是否正确或用作身份验证。
常见的,论坛里面用户的密码是经过MD5等Hash算法算出来的Hash值进行保存的。
在通常的网络下载中,会带有一个Hash值,这个值是用来校验你下载的文件是否损坏并保证尚未被别人篡改的。
MD5和HASH区别?
Hash,一般翻译做“散列”,也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。
关键特性:单向性 抗冲突性 映射分布均匀性和差分分布均匀性
而MD5可以说是目前应用最广泛的Hash算法
MD5算法原理及实现
散列函数,也称作哈希函数,消息摘要函数,单向函数或者杂凑函数。散列函数主要用于验证数据的完整性。通过散列函数,可以创建消息的“数字指纹”,消息接收方可以通过校验消息的哈希值来验证消息的完整性,防止消息被篡改。散列函数具有以下特性:
  
 任何消息经过散列函数处理后,都会产生一个唯一的散列值,这个散列值可以用来验证消息的完整性。计算消息散列值的过程被称为“消息摘要”,计算消息散列值的算法被称为消息摘要算法。常使用的消息摘要算法有:MD—消息摘要算法,SHA—安全散列算法,MAC—消息认证码算法。本文主要来了解MD算法。
  
 MD5算法是典型的消息摘要算法,它是由MD4,MD3和MD2算法演变而来。无论是哪一种MD算法,其原理都是接受一个任意长度的消息并产生一个128位的消息摘要。如果把得到的消息摘要转换成十六进制字符串,则会得到一个32字节长度的字符串,我们平常见到的大部分MD数字指纹就是一个长度为32的十六进制字符串。
  
 假设原始消息长度是b(以bit为单位),注意这里b可以是任意长度,并不一定要是8的整数倍。计算该消息MD5值的过程如下:
  
 在计算消息的MD5值之前,首先对原始信息进行填充,这里的信息填充分为两步。
   第一步,对原始信息进行填充,填充之后,要求信息的长度对512取余等于448。填充的规则如下:假设原始信息长度为b bit,那么在信息的b+1 bit位填充1,剩余的位填充0,直到信息长度对512取余为448。这里有一点需要注意,如果原始信息长度对512取余正好等于448,这种情况仍然要进行填充,很明显,在这时我们要填充的信息长度是512位,直到信息长度对512取余再次等于448。所以,填充的位数最少为1,最大为512。
   第二步,填充信息长度,我们需要把原始信息长度转换成以bit为单位,然后在第一步操作的结果后面填充64bit的数据表示原始信息长度。第一步对原始信息进行填充之后,信息长度对512取余结果为448,这里再填充64bit的长度信息,整个信息恰好可以被512整除。其实从后续过程可以看到,计算MD5时,是将信息分为若干个分组进行处理的,每个信息分组的长度是512bit。
  
 在进行MD5值计算之前,我们先来做一些定义。
  
 下面就是最核心的信息处理过程,计算MD5的过程实际上就是轮流处理每个信息分组的过程。
  
 MD5算法实现如下所示。
  
 这里也和Java提供的标准MD5算法进行了对比,通过测试可以看到该MD5计算的结果和Java标准MD5算法的计算结果是一样的。
请教MD5算法 用C语言实现
#include #include #include #if defined(__APPLE__)# define COMMON_DIGEST_FOR_OPENSSL# include # define SHA1 CC_SHA1#else# include #endif// 这是我自己写的函数,用于计算MD5// 参数 str:要转换的字符串// 参数 lengthL: 字符串的长度 可以用 strlen(str) 直接获取参数str的长度// 返回值:MD5字符串char *str2md5(const char * str, int length) { int n; MD5_CTX c; unsigned char digest[16]; char *out = (char*)malloc(33); MD5_Init(&c); while (length > 0) { if (length > 512) { MD5_Update(&c, str, 512); } else { MD5_Update(&c, str, length); } length -= 512; str += 512; } MD5_Final(digest, &c); for (n = 0; n < 16; ++n) { snprintf(&(out[n*2]), 16*2, "%02x", (unsigned int)digest[n]); } return out;} int main(int argc, char **argv) { char *output = str2md5("hello", strlen("hello")); printf("%s\n", output); // 上面会输出 hello的MD5字符串: // 5d41402abc4b2a76b9719d911017c592 free(output); return 0; }
求用c语言实现md5算法的编程思路
主要就是调用库函数
MD5加密说到底也是函数计算
没有什么思路的问题,了解md5的发明算法,这应该是一个数学问题
我这里有代码,你可以参考一下
#include      
  #include     
  #include      
  #include      
    
  typedef   unsigned   char   *POINTER;   
  typedef   unsigned   short   int   UINT2;   
  typedef   unsigned   long   int   UINT4;   
    
  typedef   struct     
  {   
  UINT4   state[4];   
  UINT4   count[2];   
  unsigned   char   buffer[64];   
  }   MD5_CTX;   
    
  void   MD5Init(MD5_CTX   *);   
  void   MD5Update(MD5_CTX   *,   unsigned   char   *,   unsigned   int);   
  void   MD5Final(unsigned   char   [16],   MD5_CTX   *);   
    
  #define   S11   7   
  #define   S12   12   
  #define   S13   17   
  #define   S14   22   
  #define   S21   5   
  #define   S22   9   
  #define   S23   14   
  #define   S24   20   
  #define   S31   4   
  #define   S32   11   
  #define   S33   16   
  #define   S34   23   
  #define   S41   6   
  #define   S42   10   
  #define   S43   15   
  #define   S44   21   
    
  static   unsigned   char   PADDING[64]   =   {   
      0x80,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0   
  };   
    
  #define   F(x,   y,   z)   (((x)   &   (y))   |   ((~x)   &   (z)))   
  #define   G(x,   y,   z)   (((x)   &   (z))   |   ((y)   &   (~z)))   
  #define   H(x,   y,   z)   ((x)   ^   (y)   ^   (z))   
  #define   I(x,   y,   z)   ((y)   ^   ((x)   |   (~z)))   
    
  #define   ROTATE_LEFT(x,   n)   (((x)   >   (32-(n))))   
    
  #define   FF(a,   b,   c,   d,   x,   s,   ac)   {     (a)   +=   F   ((b),   (c),   (d))   +   (x)   +   (UINT4)(ac);     (a)   =   ROTATE_LEFT   ((a),   (s));     (a)   +=   (b);       }   
  #define   GG(a,   b,   c,   d,   x,   s,   ac)   {     (a)   +=   G   ((b),   (c),   (d))   +   (x)   +   (UINT4)(ac);     (a)   =   ROTATE_LEFT   ((a),   (s));     (a)   +=   (b);       }   
  #define   HH(a,   b,   c,   d,   x,   s,   ac)   {     (a)   +=   H   ((b),   (c),   (d))   +   (x)   +   (UINT4)(ac);     (a)   =   ROTATE_LEFT   ((a),   (s));     (a)   +=   (b);       }   
  #define   II(a,   b,   c,   d,   x,   s,   ac)   {     (a)   +=   I   ((b),   (c),   (d))   +   (x)   +   (UINT4)(ac);     (a)   =   ROTATE_LEFT   ((a),   (s));     (a)   +=   (b);   }   
    
    
  inline   void   Encode(unsigned   char   *output,   UINT4   *input,   unsigned   int   len)   
  {   
  unsigned   int   i,   j;   
    
  for   (i   =   0,   j   =   0;   j   <   len;   i++,   j   +=   4)   {   
  output[j]   =   (unsigned   char)(input[i]   &   0xff);   
  output[j+1]   =   (unsigned   char)((input[i]   >>   8)   &   0xff);   
  output[j+2]   =   (unsigned   char)((input[i]   >>   16)   &   0xff);   
  output[j+3]   =   (unsigned   char)((input[i]   >>   24)   &   0xff);   
  }   
  }   
    
  inline   void   Decode(UINT4   *output,   unsigned   char   *input,   unsigned   int   len)   
  {   
  unsigned   int   i,   j;   
    
  for   (i   =   0,   j   =   0;   j   <   len;   i++,   j   +=   4)   
  output[i]   =   ((UINT4)input[j])   |   (((UINT4)input[j+1])   <<   8)   |   
  (((UINT4)input[j+2])   <<   16)   |   (((UINT4)input[j+3])   <<   24);   
  }   
    
  inline   void   MD5Transform   (UINT4   state[4],   unsigned   char   block[64])   
  {   
  UINT4   a   =   state[0],   b   =   state[1],   c   =   state[2],   d   =   state[3],   x[16];   
  Decode   (x,   block,   64);   
  FF   (a,   b,   c,   d,   x[   0],   S11,   0xd76aa478);   /*   1   */   
  FF   (d,   a,   b,   c,   x[   1],   S12,   0xe8c7b756);   /*   2   */   
  FF   (c,   d,   a,   b,   x[   2],   S13,   0x242070db);   /*   3   */   
  FF   (b,   c,   d,   a,   x[   3],   S14,   0xc1bdceee);   /*   4   */   
  FF   (a,   b,   c,   d,   x[   4],   S11,   0xf57c0faf);   /*   5   */   
  FF   (d,   a,   b,   c,   x[   5],   S12,   0x4787c62a);   /*   6   */   
  FF   (c,   d,   a,   b,   x[   6],   S13,   0xa8304613);   /*   7   */   
  FF   (b,   c,   d,   a,   x[   7],   S14,   0xfd469501);   /*   8   */   
  FF   (a,   b,   c,   d,   x[   8],   S11,   0x698098d8);   /*   9   */   
  FF   (d,   a,   b,   c,   x[   9],   S12,   0x8b44f7af);   /*   10   */   
  FF   (c,   d,   a,   b,   x[10],   S13,   0xffff5bb1);   /*   11   */   
  FF   (b,   c,   d,   a,   x[11],   S14,   0x895cd7be);   /*   12   */   
  FF   (a,   b,   c,   d,   x[12],   S11,   0x6b901122);   /*   13   */   
  FF   (d,   a,   b,   c,   x[13],   S12,   0xfd987193);   /*   14   */   
  FF   (c,   d,   a,   b,   x[14],   S13,   0xa679438e);   /*   15   */   
  FF   (b,   c,   d,   a,   x[15],   S14,   0x49b40821);   /*   16   */   
  GG   (a,   b,   c,   d,   x[   1],   S21,   0xf61e2562);   /*   17   */   
  GG   (d,   a,   b,   c,   x[   6],   S22,   0xc040b340);   /*   18   */   
  GG   (c,   d,   a,   b,   x[11],   S23,   0x265e5a51);   /*   19   */   
  GG   (b,   c,   d,   a,   x[   0],   S24,   0xe9b6c7aa);   /*   20   */   
  GG   (a,   b,   c,   d,   x[   5],   S21,   0xd62f105d);   /*   21   */   
  GG   (d,   a,   b,   c,   x[10],   S22,     0x2441453);   /*   22   */   
  GG   (c,   d,   a,   b,   x[15],   S23,   0xd8a1e681);   /*   23   */   
  GG   (b,   c,   d,   a,   x[   4],   S24,   0xe7d3fbc8);   /*   24   */   
  GG   (a,   b,   c,   d,   x[   9],   S21,   0x21e1cde6);   /*   25   */   
  GG   (d,   a,   b,   c,   x[14],   S22,   0xc33707d6);   /*   26   */   
  GG   (c,   d,   a,   b,   x[   3],   S23,   0xf4d50d87);   /*   27   */   
  GG   (b,   c,   d,   a,   x[   8],   S24,   0x455a14ed);   /*   28   */   
  GG   (a,   b,   c,   d,   x[13],   S21,   0xa9e3e905);   /*   29   */   
  GG   (d,   a,   b,   c,   x[   2],   S22,   0xfcefa3f8);   /*   30   */   
  GG   (c,   d,   a,   b,   x[   7],   S23,   0x676f02d9);   /*   31   */   
  GG   (b,   c,   d,   a,   x[12],   S24,   0x8d2a4c8a);   /*   32   */   
  HH   (a,   b,   c,   d,   x[   5],   S31,   0xfffa3942);   /*   33   */   
  HH   (d,   a,   b,   c,   x[   8],   S32,   0x8771f681);   /*   34   */   
  HH   (c,   d,   a,   b,   x[11],   S33,   0x6d9d6122);   /*   35   */   
  HH   (b,   c,   d,   a,   x[14],   S34,   0xfde5380c);   /*   36   */   
  HH   (a,   b,   c,   d,   x[   1],   S31,   0xa4beea44);   /*   37   */   
  HH   (d,   a,   b,   c,   x[   4],   S32,   0x4bdecfa9);   /*   38   */   
  HH   (c,   d,   a,   b,   x[   7],   S33,   0xf6bb4b60);   /*   39   */   
  HH   (b,   c,   d,   a,   x[10],   S34,   0xbebfbc70);   /*   40   */   
  HH   (a,   b,   c,   d,   x[13],   S31,   0x289b7ec6);   /*   41   */   
  HH   (d,   a,   b,   c,   x[   0],   S32,   0xeaa127fa);   /*   42   */   
  HH   (c,   d,   a,   b,   x[   3],   S33,   0xd4ef3085);   /*   43   */   
  HH   (b,   c,   d,   a,   x[   6],   S34,     0x4881d05);   /*   44   */   
  HH   (a,   b,   c,   d,   x[   9],   S31,   0xd9d4d039);   /*   45   */   
  HH   (d,   a,   b,   c,   x[12],   S32,   0xe6db99e5);   /*   46   */   
  HH   (c,   d,   a,   b,   x[15],   S33,   0x1fa27cf8);   /*   47   */   
  HH   (b,   c,   d,   a,   x[   2],   S34,   0xc4ac5665);   /*   48   */   
  II   (a,   b,   c,   d,   x[   0],   S41,   0xf4292244);   /*   49   */   
  II   (d,   a,   b,   c,   x[   7],   S42,   0x432aff97);   /*   50   */   
  II   (c,   d,   a,   b,   x[14],   S43,   0xab9423a7);   /*   51   */   
  II   (b,   c,   d,   a,   x[   5],   S44,   0xfc93a039);   /*   52   */   
  II   (a,   b,   c,   d,   x[12],   S41,   0x655b59c3);   /*   53   */   
  II   (d,   a,   b,   c,   x[   3],   S42,   0x8f0ccc92);   /*   54   */   
  II   (c,   d,   a,   b,   x[10],   S43,   0xffeff47d);   /*   55   */   
  II   (b,   c,   d,   a,   x[   1],   S44,   0x85845dd1);   /*   56   */   
  II   (a,   b,   c,   d,   x[   8],   S41,   0x6fa87e4f);   /*   57   */   
  II   (d,   a,   b,   c,   x[15],   S42,   0xfe2ce6e0);   /*   58   */   
  II   (c,   d,   a,   b,   x[   6],   S43,   0xa3014314);   /*   59   */   
  II   (b,   c,   d,   a,   x[13],   S44,   0x4e0811a1);   /*   60   */   
  II   (a,   b,   c,   d,   x[   4],   S41,   0xf7537e82);   /*   61   */   
  II   (d,   a,   b,   c,   x[11],   S42,   0xbd3af235);   /*   62   */   
  II   (c,   d,   a,   b,   x[   2],   S43,   0x2ad7d2bb);   /*   63   */   
  II   (b,   c,   d,   a,   x[   9],   S44,   0xeb86d391);   /*   64   */   
  state[0]   +=   a;   
  state[1]   +=   b;   
  state[2]   +=   c;   
  state[3]   +=   d;   
  memset   ((POINTER)x,   0,   sizeof   (x));   
  }   
    
  inline   void   MD5Init(MD5_CTX   *context)   
  {   
      context->count[0]   =   context->count[1]   =   0;   
      context->state[0]   =   0x67452301;   
      context->state[1]   =   0xefcdab89;   
      context->state[2]   =   0x98badcfe;   
      context->state[3]   =   0x10325476;   
  }   
    
  inline   void   MD5Update(MD5_CTX   *context,   unsigned   char   *input,   unsigned   int   inputLen)   
  {   
  unsigned   int   i,   index,   partLen;   
    
  index   =   (unsigned   int)((context->count[0]   >>   3)   &   0x3F);   
  if   ((context->count[0]   +=   ((UINT4)inputLen   <<   3))   
  <   ((UINT4)inputLen   <<   3))   
  context->count[1]++;   
  context->count[1]   +=   ((UINT4)inputLen   >>   29);   
    
  partLen   =   64   -   index;   
    
  if   (inputLen   >=   partLen)   {   
  memcpy((POINTER)&context->buffer[index],   (POINTER)input,   partLen);   
  MD5Transform(context->state,   context->buffer);   
    
  for   (i   =   partLen;   i   +   63   <   inputLen;   i   +=   64)   
  MD5Transform   (context->state,   &input[i]);   
  index   =   0;   
  }   
  else   
  i   =   0;   
    
  memcpy((POINTER)&context->buffer[index],   (POINTER)&input[i],   inputLen-i);   
  }   
    
  inline   void   MD5Final(unsigned   char   digest[16],   MD5_CTX   *context)   
  {   
  unsigned   char   bits[8];   
  unsigned   int   index,   padLen;   
    
  Encode   (bits,   context->count,   8);   
  index   =   (unsigned   int)((context->count[0]   >>   3)   &   0x3f);   
  padLen   =   (index   <   56)   ?   (56   -   index)   :   (120   -   index);   
  MD5Update   (context,   PADDING,   padLen);   
  MD5Update   (context,   bits,   8);   
  Encode   (digest,   context->state,   16);   
  memset   ((POINTER)context,   0,   sizeof   (*context));   
  }   
    
  void   MD5Digest(char   *pszInput,   unsigned   long   nInputSize,   char   *pszOutPut)   
  {   
  MD5_CTX   context;   
  unsigned   int   len   =   strlen   (pszInput);   
    
  MD5Init   (&context);   
  MD5Update   (&context,   (unsigned   char   *)pszInput,   len);   
  MD5Final   ((unsigned   char   *)pszOutPut,   &context);   
  }   
    
main()   
{ char szDigest[16];   
  char encrypt[200];   
  printf("请输入要计算MD5值的字符串:");
  gets(encrypt);
  printf("\n加密结果:");  
  MD5Digest(encrypt,strlen(encrypt),szDigest);   
  int i;
  for (i=0;i<16;i++) printf ("%02X",(unsigned char)szDigest[i]);
getchar();
}
求c++或c 完整代码
从样例来看,假设没有结合律和优先级,即a+b+c,a*b+c这样的表达式认为是不合法的。否则要复杂很多。#include using std::cin;using std::cout;void parse_expression();void parse_term();void parse_expression() //expression是term或term op term{parse_term();char ch;cin.get(ch);switch (ch) {case '+':case '-':case '*':case '/'://处理term op term型的expressionparse_term();cout << ch;break;case ')'://')'要留给相应的term去处理,见parse_termcin.unget();}}void parse_term() //term是(expression)或单个字符{char ch;cin.get(ch);switch (ch) {case '('://处理(expression)型的termparse_expression();cin.ignore(); //读出')'并忽略break;default://单个字符的情况cout << ch;}}int main() {parse_expression();return 0;}
求C语言或者c++完整代码、、、
#include #include /* 实现循环队列 */#define CAPACITY 100typedef struct CircularQueue { int elements[CAPACITY]; int front; /* 队列头 */ int rear; /* 队列尾 */ int length; /* 队列中元素个数 */ int capacity; /* 队列的长度 */} CircularQueue;static CircularQueue queue = { { 0 } };/* 入队列 */static void CircularQueue_push(int element) { if (queue.length == queue.capacity) { /* 队列已满 */ printf("No\n"); return; } queue.elements[queue.rear] = element; queue.rear = (queue.rear + 1) % queue.capacity; queue.length++;}/* 出队列 */static int CircularQueue_pop(void) { if (queue.length == 0) return -1; /* 队列已空 */ int e = queue.elements[queue.front]; queue.front = (queue.front + 1) % queue.capacity; queue.length--; return e;}int main() { int i; int n, m, d; scanf("%d%d", &n, &m); queue.capacity = m; for (i = 0; i < n; i++) { scanf("%d", &d); if (d == 0) printf("%d\n", CircularQueue_pop()); else CircularQueue_push(d); } return 0;}
md5算法是什么
MD5的全称是Message-Digest Algorithm 5,在90年代初由MIT的计算机科学实验室和RSA Data Security Inc发明,经MD2、MD3和MD4发展而来。 
Message-Digest泛指字节串(Message)的Hash变换,就是把一个任意长度的字节串变换成一定长的大整数。请注意我使用了“字节串”而不是“字符串”这个词,是因为这种变换只与字节的值有关,与字符集或编码方式无关。 
MD5将任意长度的“字节串”变换成一个128bit的大整数,并且它是一个不可逆的字符串变换算法,换句话说就是,即使你看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串,从数学原理上说,是因为原始的字符串有无穷多个,这有点象不存在反函数的数学函数。 
MD5的典型应用是对一段Message(字节串)产生fingerprint(指纹),以防止被“篡改”。举个例子,你将一段话写在一个叫 readme.txt文件中,并对这个readme.txt产生一个MD5的值并记录在案,然后你可以传播这个文件给别人,别人如果修改了文件中的任何内容,你对这个文件重新计算MD5时就会发现(两个MD5值不相同)。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。 
MD5还广泛用于加密和解密技术上,在很多操作系统中,用户的密码是以MD5值(或类似的其它算法)的方式保存的, 用户Login的时候,系统是把用户输入的密码计算成MD5值,然后再去和系统中保存的MD5值进行比较,而系统并不“知道”用户的密码是什么。
我的抖音号为什么被封
抖音号被封号的原因有以下几个方面:对于抖音运营者来说,这4种行为更容易触线、违规!1.视频中含有水印,会被限制曝光;这条规则的界定比较模糊,哪些内容元素会被判定为水印并没有明确说明。目前对于众多账号的观察分析,视频中的字幕过于明显,停留时间过长会被判定为有水印。2.内容不符合抖音站内公约的视频,会被限制曝光;抖音社区公约的规则,是内容创作者绝对不能踩的红线。危害国家社会安全,色情低俗、封建迷信等触碰原则性的视频内容一定是会被严肃处理。具体规则可参照《抖音自律公约》;ps:进入自己的抖音设置页面后,便可以从“设置”列表的下方找到“社区自律公约”,也就是所谓的社区规则了。要提醒大家的是,在运营抖音号时,一定是建立在抖音平台的规则基础之上。3.搬运视频搬运,说白了就是盗用他人的作品。作为一个视频平台,抖音希望看到的是优质的原创内容,而不是大量的重复性内容。之前很多“内行人”提到通过添加片头片尾、加字幕、修改视频MD5、修改视频尺寸可以骗过平台的审核。或许因为侥幸,你骗过抖音一两次,但只要被查到一次,平台就会重点标注你的账号,一旦重复违规,就会受到更严厉的处罚。在抖音,原创的门槛会越来越低,搬运的代价会越来越高!4.发广告打广告,本质目的其实就两个,引流和变现。对于抖音来说,自己花费巨额资金从其他平台引流来的用户,被你通过广告轻轻松松拉到微信、QQ,APP等渠道里面,它当然不愿意。因此,在抖音对恶意营销、广告行为的审核一直都是最严的一类。审核类型包括:A.视频内容中含有个人联系方式(二维码、电话、个人微信/QQ号、微信群/QQ群等)或内容含有多处推广信息;B.有明显营销意图,如「回复xx,获得xx」C.推广带有二维码、图文形式联络方式等;D.诱导用户点击/关注本人帐号之外的其他帐号,如:关注领奖、关注看回答、关注获取下载资源等;
请来看一下这个配置怎么样,老手来
这U热功耗84w,电源值得商榷.
4460吧,多个1m 2级缓存.核显本身就是鸡肋.而且性价比高些.
主板不予置评,我选的话映泰.
显卡既然你自己坚定A平台,当然买新不买旧,毕竟工艺上32n强于40nm,另外,你不换电源还要考虑功耗,小板还考虑散热.我要是你就买HIS 7850 turbo.但是你二择一,兰迪不错.
干嘛用威刚的内存,这家都是买的人家的电路板和晶圆.你买个G.SKiLL红马甲不好么?
威刚多年国内战场,实际就是个二道贩子.
