2010-12-16 4 views
1

C#을 사용하여 암호를 암호화하고 암호 해독 할 수있는 응용 프로그램을 만들고 싶습니다.C#을 사용하여 암호 암호화 및 암호 해독

제 아이디어는 간단합니다. 입력 한 문자열에서 각 문자를 추출하려면 Substring을 사용할 것이고 나는 ASCI 코드를 조작하여 다른 문자로 변환 할 것입니다. 동일한 방법으로 암호화 할 것입니다.

누군가 내 암호를 해독하는 것이 얼마나 어렵습니까?

제안이나 예제 코드를 찾고 있습니다.

+0

추가 정보 : 팁 : 암호화 된 암호를 저장하지 말고 해시를 저장하십시오. – Smur

답변

8

.NET에는 암호화를위한 많은 보안 방법이 있습니다. 나는 해결책을 스스로 구현하려고 시도하는 대신 System.Security.Cryptography을 더 잘보아야한다고 생각한다.

7

Caesar cyphers은 악명 높게 안전하지 않습니다. 이 방법을 효과없는 것으로 포기하십시오. 암호 보호에 대한 더 많은 연구를하십시오.

+1

어쨌든, 이중 암호로 암호화하면 Ceasar 암호를 2 번 사용하거나 더 많이 암호화 할 것입니다! –

+1

@ dotNET : 음, 아니. 어떤 쌍의 카이사르 카이저도 다른 카이저 카이저와 같습니다. 자신의 암호 작성을 시도하지 마십시오. –

+5

@dotNet : Caesar cyphers는 쓸데없는 점에서 불안합니다. 연습 된 눈을 가진 사람은 연필을 사용하지 않고도 눈을 부셔 버릴 수 있습니다. 실제로 컴퓨터를 크랙하는 것보다 컴퓨터를 크랙하기 위해 프로그램을로드하는 데 오랜 시간이 걸립니다. 암호 보호 및 암호화에 대한 더 많은 연구를해야한다고 나는 매우 심각합니다. 비밀리에 대칭 암호화를 적용하지 않는 것이 이상적입니다. 해싱 또는 비대칭 암호화가보다 실용적인 옵션입니다. –

2

데이터를 암호화하는 라이브러리가 있습니다. 그들의 암호화 알고리즘은 당신이 생각해 낼 수있는 것보다 낫습니다. 그것을 써.

2

암호화 된 버전의 암호를 저장할 이유가 거의 없습니다. 이로 인해 보안 취약점이 발생합니다. 대신 일반적으로 임의의 소금과 결합 된 암호의 단방향 해시 (예 : SHA1 사용)를 저장하는 것이 가장 좋습니다. 그런 다음 암호를 실제로 비교하지 않고 항상 입력 된 암호의 해시와 데이터베이스에 저장된 해시를 비교합니다.

이 접근법의 장점은 데이터베이스에 대한 액세스 권한이 있어도 사용자의 암호가 무엇인지 결정할 수 없다는 것입니다. 그리고 소금은 동일한 비밀번호를 서로 다른 것으로 보입니다.

다음은 System.Security.Cryptography 네임 스페이스를 사용하여 임의 염분을 생성 한 예입니다.

byte[] salt = new byte[10]; 
RandomNumberGenerator.Create().GetBytes(salt); 

당신은 암호로 소금을 결합하여 다음과 같이 단방향 해시를 생성 할 수 있습니다

byte[] passwordBytes = new byte[Encoding.UTF8.GetByteCount(password) + salt.Length]; // Create buffer for password bytes and hash 
int passwordLength = Encoding.UTF8.GetBytes(password, 0, password.Length, passwordBytes, 0); 
salt.CopyTo(passwordBytes, passwordLength); 
byte[] hash = null; 
using (SHA512Managed hasher = new SHA512Managed()) { 
    hash = hasher.ComputeHash(passwordBytes); 
} 

스토어 모두 해시 암호와 소금. 사용자를 인증 할 때 사용자가 입력 한 암호를 해시하기 위해 저장된 해시를 만들 때 사용 된 소금과 동일한 소금을 사용하십시오. 이 새 해시를 데이터베이스의 해시와 비교하십시오.

+1

방금 ​​질문을 다시 읽었으며 귀하의 의견을 놓친 것 같습니다. 다양한 소스에 대한 자신의 암호를 암호화 된 방식으로 저장하는 방법을 만들려는 경우이 접근법은 분명히 사용자가 아는 것과 다릅니다.그러나 인증 방법에 관심이있는 모든 사람들을 위해이 대답을 남겨 둘 것입니다. –

관련 문제