오랜만에 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
♡ 여러분의 공감이 빅에너지에게 에너지원입니다. 공감, 좋아요 부탁합니다~ ♡
댓글