C\#salt+hash 암호 화

6108 단어 C#암호 화
1.선명 확 몇 가지 기본 개념
1.위조 난수:pseudo-random number generator,약칭:PRNGs,컴퓨터 가 일정한 알고리즘 을 이용 하여 만 든 것 이다.위조 랜 덤 수 는 가짜 랜 덤 수가 아 닙 니 다.여기 서'위조'는 규칙 적 인 뜻 입 니 다.  컴퓨터 가 만들어 내 는 가짜 랜 덤 수 는 랜 덤 이자 규칙 적 이다.어떻게 이해 해요?발생 하 는 위조 무 작위 수 는 때로는 일정한 규칙 을 지 키 고 때로는 어떠한 규칙 도 지 키 지 않 는 다.위조 무 작위 수 는 일부분 이 일정한 규칙 을 준수 한다.다른 부분 은 어떤 규칙 도 지 키 지 않 는 다.예 를 들 어'세상 에 두 개의 모양 이 똑 같은 나뭇잎 이 없다'는 것 은 바로 사물 의 특성,즉 임 의 성 을 점 한 것 이다.그러나 모든 나무의 잎 은 비슷 한 모양 을 가지 는데 이것 이 바로 사물 의 공통성,즉 규칙 성 이다.이런 측면 에서 볼 때,너 는 아마도 이러한 사실 을 받 아들 일 것 이다.컴퓨터 는 위조 난수 만 생 길 수 있 을 뿐 절대 난수 가 생 길 수 없다.
2.진 난수:true random number generator,약칭:TRNGs,예측 할 수 없 는 물리 적 방식 으로 발생 하 는 난수 입 니 다.
3.명문:원본 암호,어떠한 알고리즘 암호 화 되 지 않 은 암호.
4.비밀문서:원본 비밀 번 호 는 특정한 알고리즘 을 통 해 암호 화 된 후에 형 성 된 암호 입 니 다.
2.C\#salt+hash 암호 화 규칙
규칙:salt 위조 랜 덤 값+원시 암호,즉 salt 위조 랜 덤 값 과 원시 암 호 를 명문 으로 조합 한 다음 에 hash 알고리즘 을 통 해 밀 문 을 형성한다.예 를 들 어:
      salt 가 발생 하 는 가짜 무 작위 수 는 9de 74893-0b41-4f4e-91dc-06f 62241 b8bc 라 고 가정 합 니 다.
      관리자
      조합 규칙:원본 명문+salt 위조 랜 덤 값,즉 admin9de 74893-0b41-4f4e-91dc-06f62241b8bc
      hash 암호 화 후 암호 화:urfFO/IWz912E2GXL4KiczbosuZ6TdLpMk7lDRVVvdYk=
      데이터베이스 테이블 결 과 는 다음 과 같다.

3.C\#salt 위조 난수 원리 생 성
   첫 번 째 단계:네 임 스페이스 using System 도입;
   두 번 째 단계:구조 체 Guid 의 NewGuid()방법 을 호출 합 니 다.
   세 번 째 단계:코드 는 string strSalt=Guid.NewGuid().ToString()을 나타 낸다. 
   주석:물론 랜 덤 과 같은 방법 으로 위조 랜 덤 수 를 만 들 수도 있 습 니 다.
4.hash 원리
hash 는 역 암호 화 할 수 없 는 알고리즘 입 니 다.C\#HASH 알고리즘 이 비교적 많 습 니 다.몇 가 지 를 열거 하면 다음 과 같 습 니 다.
   1、MD5
   2.SHA 가족:참고 로 미국 정 부 는 예전 에 SHA-1 알고리즘 을 광범 위 하 게 사 용 했 는데 2005 년 에 중국 산 둥 대학의 왕 샤 오 윈 교수 에 게 안전 결함 을 발 견 했 기 때문에 현 재 는 SHA-1 가 장 된 변종,예 를 들 어 SHA-256 을 많이 사용 합 니 다..NET 에 서 는 SHA 256 Managed 클래스 를 사용 할 수 있 습 니 다.
   3.핵심 코드 는 다음 과 같다.

 protected void btnRegister_Click(object sender, EventArgs e)
 {
  //      
  string userName = this.TextBoxUserName.Text;
  string userPwd = this.TextBoxPWD.Text;
  //salt
  string strSalt= Guid.NewGuid().ToString();
  //SHA256  
  byte[] pwdAndSalt = Encoding.UTF8.GetBytes(userPwd + strSalt);
  byte[] hashBytes = new SHA256Managed().ComputeHash(pwdAndSalt);
  string hashStr = Convert.ToBase64String(hashBytes);
  StringBuilder strBuid = new StringBuilder();
  strBuid.Append("INSERT INTO userInfo(");
  strBuid.Append("userName,userPassword,salt) values(");
  strBuid.Append("@userName,@hashStr,@strSalt)");
  SqlParameter[] sqlpara = {
      new SqlParameter("@userName",SqlDbType.NVarChar,50),
      new SqlParameter("@hashStr",SqlDbType.NVarChar,50),
      new SqlParameter("@strSalt",SqlDbType.NVarChar,50)
     };
  sqlpara[0].Value = this.TextBoxUserName.Text;
  sqlpara[1].Value = hashStr;
  sqlpara[2].Value = strSalt;
  //       
  string sqlConStr = ConfigurationManager.ConnectionStrings["conStr"].ConnectionString;
  using (SqlConnection con=new SqlConnection(sqlConStr))
  {
  con.Open();
  SqlCommand cmd = new SqlCommand(strBuid.ToString(),con);
  cmd.Parameters.AddRange(sqlpara);
  if (cmd.ExecuteNonQuery()>0)
  {
   Response.Write("<script>alert('    !')</script>");
  }
  else
  {
   Response.Write("<script>alert('    !')</script>");
  }
   
  }
 }
5.C\#일반적인 암호 화 알고리즘
MD5 암호 화,SHA 가족 암호 화,RSA 암호 화,DES 암호 화,현재 주 류 는 RSA 로 암호 화 되 어 있 습 니 다.예 를 들 어 디지털 서명 등 은 본 블 로그 에서 논술 하지 않 고 앞으로 이 네 가지 알고리즘 에 대해 상세 하 게 논술 할 것 입 니 다.
6.흔히 볼 수 있 는 암호 해독 알고리즘(인용https://www.jb51.net/article/102918.htm)
가장 간단 하고 흔히 볼 수 있 는 해독 방식 은 사전 해독(Dictionary Attack)과 폭력 해독(Brute Force Attack)방식 이다.이 두 가지 방법 은 말하자면 비밀 번 호 를 맞 추 는 것 이다.

사전 해독 과 폭력 해독 은 모두 효율 이 비교적 낮은 해독 방식 이다.데이터베이스 에 있 는 암호 의 해시 값 을 알 게 된다 면 더 효율 적 인 해독 방식 으로 표 법(Lookup Tables)을 찾 을 수 있 습 니 다.역방향 체크 표 법(Reverse Lookup Tables),무지개 시계(Rainbow Tables)등 도 체크 표 법 과 대동소이 하 다.이제 표 법의 원 리 를 살 펴 보 자.
체크 표 법 은 사전 해독 과 폭력 해독 처럼 비밀 번 호 를 맞 히 지 않 는 다.먼저 자주 사용 하 는 암호 의 해시 값 을 계산 한 다음 에 시 계 를 만 들 었 다.물론 비밀번호 가 많 을 수록 이 시 계 는 커진다.어떤 암호 의 해시 값 을 알 고 있 을 때,당신 이 만 든 표 에서 이 해시 값 을 찾 아야 합 니 다.찾 으 면 해당 하 는 비밀 번 호 를 알 수 있 습 니 다.

7.왜 hash 를 사용 하여 암호 화 합 니까?(참조https://www.jb51.net/article/102918.htm)
만약 에 비밀번호(예 를 들 어 사이트 사용자 의 비밀번호)를 저장 해 야 한다 면 이 암호 데 이 터 를 어떻게 보호 하 는 지 고려 해 야 합 니 다.아래 처럼 비밀 번 호 를 데이터베이스 에 직접 기록 하 는 것 은 매우 안전 하지 않 습 니 다.데이터 베 이 스 를 열 수 있 는 모든 사람 이 이 비밀 번 호 를 직접 볼 수 있 기 때 문 입 니 다.

해결 방법 은 암 호 를 암호 화한 후에 데이터베이스 에 저장 하 는 것 이다.비교적 자주 사용 하 는 암호 화 방법 은 해시 함수(Hash Function)를 사용 하 는 것 이다.해시 함수 의 구체 적 인 정 의 는 인터넷 이나 관련 서적 에서 찾 아 볼 수 있 습 니 다.쉽게 말 하면 그 특성 은 다음 과 같 습 니 다.
(1)원시 암 호 는 해시 함수 로 계산 한 후 해시 값 을 얻는다.
(2)원본 비밀 번 호 를 바 꾸 면 해시 함수 가 계산 한 해시 값 도 이에 따라 달라 집 니 다.
(3)같은 비밀번호,해시 값 도 같다.
(4)해시 함 수 는 단 방향 이 고 거 스 를 수 없다.즉,해시 값 에서 원본 비밀번호 가 얼마 인지 계산 할 수 없다 는 것 이다.
해시 함수 가 있 으 면 우 리 는 암호 의 해시 값 을 데이터베이스 에 저장 할 수 있다.사용자 가 사이트 에 로그 인 할 때,우 리 는 사용자 가 비밀 번 호 를 입력 한 해시 값 이 데이터베이스 에 있 는 해시 값 과 같 는 지 확인 할 수 있다.

해시 함 수 는 거 스 를 수 없 기 때문에 누군가가 데이터 베 이 스 를 열 어도 사용자 의 비밀번호 가 얼마 인지 볼 수 없습니다.
그렇다면 해시 함수 로 암호 화 된 비밀 번 호 를 저장 하 는 것 이 안전 한 것 일 까?6 참조,발견 안전 하지 않 습 니 다.salt 를 더 해 야 안전 합 니 다.salt 는 무 작위 로 생 성 되 기 때 문 입 니 다.
이상 은 본 고의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.또한 저 희 를 많이 지지 해 주시 기 바 랍 니 다!

좋은 웹페이지 즐겨찾기