IT정보공유/C#

C# SHA-256 암호화시 SALT(소금치기) 적용하는 샘플코드

알지오™ 2019. 2. 13.

오랜만에 SHA256으로 암호화 할 일이 생겨서 샘플 코드를 작성하게 됐습니다. 다른 개발회사와의 연동으로 Java로 작성된 SHA-256 암호화 코드와 호환되게 CSharp으로 암호화 코드를 만들어야 했는데, Java code에는 MessageDigest 클래스에 Update라고 해서 SALT를 추가하여 해쉬암호화 텍스트를 생성할 수 있는 함수가 있더군요.

 

 

Java SHA256 암호화 샘플 소스코드

 //자바 SHA256 소스코드 
 
 public static String encryptSha256(String SrcText,String salt)
 { 
 	String returnStr = "";
    MessageDigest msgDigest;
    
    try 
    { 
    	msgDigest = MessageDigest.getInstance("SHA-256");
        msgDigest.reset();
        msgDigest.update(salt.getBytes());
        
        byte[] digest = msgDigest.digest(SrcText.getBytes());
        returnStr = Hex.encodeHexString(digest);
    }catch (NoSuchAlgorithmException e)
    { 
    	logger.error(e.getMessage());
    } 
    return returnStr; 
} 

// 

 

 

C# SHA256 샘플 소스코드

C# 에서는 자바코드의 update 같은 함수가 없습니다. 그래서 SALT를 추가해서 암호화 하려면 어떻게 해야하나 싶어서 인터넷을 뒤져보니 아래 C# 소스코드 처럼 바이트배열을 만든 후, salt 뒤로 srtText의 바이트 배열을 더해서 해쉬코드를 생성하면 됩니다.

 

 

//C# SHA256 소스코드
public string GetEncryptSHA256_SALT(string SrcText, string salt) 
{
	int i = 0; 
    Algorithm alg = new Algorithm(_algorithmName, new SHA256Managed());
    alg.hash.Initialize();
    
    byte[] srcBytes = System.Text.ASCIIEncoding.ASCII.GetBytes(SrcText);
    byte[] saltBytes = System.Text.ASCIIEncoding.ASCII.GetBytes(salt);
    byte[] DesSaltHash = SaltHash(srcBytes, saltBytes);
    
    StringBuilder sb = new StringBuilder(DesSaltHash.Length * 2 + (DesSaltHash.Length / 8));
    for (i = 0; i < DesSaltHash.Length; i++) 
    { 
    	sb.Append(BitConverter.ToString(DesSaltHash, i, 1)); 
    } 
    
    string rKey = sb.ToString().TrimEnd(new char[] { ' ' }).ToLower();
    return rKey; 
} 

private byte[] SaltHash(byte[] srcBytes, byte[] salt) 
{ 
	HashAlgorithm sha256 = new SHA256CryptoServiceProvider();
    byte[] combined = salt.Concat(srcBytes).ToArray();
    byte[] hashed = sha256.ComputeHash(combined); return hashed; 
} 

// 

 

 

간단하게 생각하면 암호화할 텍스트와 SALT 를 더해서, 암호화 한다고 생각하면 됩니다.

 

아래 링크된 블로그도 한번 읽어보시면 좋을것 같습니다.

비밀번호 해시에 소금치기 - 바르게 쓰기

 

비밀번호 해시에 소금치기 - 바르게 쓰기

웹 서핑중에 비밀번호 암호화 관련해서 좋은 글이 있어서 번역해 봤습니다. 개인 프로젝트를 하던 다른 서비스 프로젝트들 하던 사용자의 비밀번호를 암호화하는것은 중요한데요. 암호화 하기

starplatina.tistory.com

 

♡ 여러분의 공감이 빅에너지에게 에너지원입니다. 공감, 좋아요 부탁합니다~ 

댓글

💲 추천 글