[알고리즘] 암호 화 알고리즘: 원시 데 이 터 를 알 고 암호 화 되 돌 릴 수 있 는 방법 을 어떻게 실현 합 니까?원본 데 이 터 를 모 르 면 암호 화 를 거 스 를 수 없습니다.
MD5 암호 화 원리
MD5 는 일종 의 산열 함수 (해시 함수 라 고도 부 르 며 해시 함 수 는 산열 함수, 잡 합 함수 라 고도 부른다) 이다. 그 는 단 방향 암호 시스템 이다. 즉, 명문 에서 밀 문 까지 의 불가 역 영사 이다. 암호 화 과정 만 복호화 과정 이 없고 해시 함 수 는 임의의 길이 의 입력 을 변 화 를 거 친 후에 고정된 길이 의 출력 을 얻 을 수 있다.이 고정 길이 의 출력 을 원래 메시지 의 해시 나 메시지 맵 이 라 고 합 니 다.
MD5 의 MD 는 Message Digest 를 대표 합 니 다. 즉, 정보 요약 을 의미 합 니 다. 그러나 이 정보 요약 은 정보 내용 의 줄 임 말 이 아니 라 공 개 된 MD5 알고리즘 에 따라 원 정 보 를 수학 적 으로 변환 하여 얻 은 128 비트 (bit) 의 특징 코드 입 니 다.
그럼 Hash (해시 함수) 가 뭐 죠?
Hash, 일반적으로 '해시' 로 번역 되 고 '해시' 로 직접 음역 되 는 것 도 있 습 니 다. 즉, 임의의 길이 의 입력 (프 리 맵 pre - image 라 고도 함) 을 해시 알고리즘 을 통 해 고정 길이 의 출력 으로 바 꾸 는 것 입 니 다. 이 출력 은 해시 값 입 니 다.이러한 전환 은 압축 맵 이다. 즉, 해시 값 의 공간 은 보통 입력 공간 보다 훨씬 작 고 서로 다른 입력 은 같은 출력 으로 해시 될 수 있 기 때문에 해시 값 에서 유일한 입력 값 을 확정 할 수 없다.쉽게 말 하면 임의의 길이 의 메 시 지 를 일정한 길이 의 메시지 요약 으로 압축 하 는 함수 입 니 다.
MD5 의 MD 는 Message Digest 를 대표 합 니 다. 즉, 정보 요약 을 의미 합 니 다. 그러나 이 정보 요약 은 정보 내용 의 줄 임 말 이 아니 라 공 개 된 MD5 알고리즘 에 따라 원 정 보 를 수학 적 으로 변환 하여 얻 은 128 비트 (bit) 의 특징 코드 입 니 다.
왜 MD5 는 거 스 를 수 없 습 니까?
말하자면 MD5 는 일종 의 정보 요약 함수 로 일종 의 매 핑 관계 이지 만 단 방향 으로 만 매 핑 할 수 있다.예 를 들 어 한 권 의 책의 모든 페이지 의 첫 번 째 글자 획 을 기록 하여 새로운 배열 에서 한 줄 의 숫자 를 얻 을 수 있다. 이 책 이 라면 바로 이 숫자 에 대응 하 는 것 이다.그러나 이 숫자 로 는 이 책의 내용 을 추산 할 수 없 는 것 이 불가 역 의 원인 이다.
일부 사이트 에 서 는 MD5 를 복호화 할 수 있 는데, 원 리 는 사실 원문 과 해시 값 을 입력 한 후에 데이터베이스 에 존재 하 게 하 는 것 이다.이른바 '복호화' 를 다시 진행 할 때 데이터 베 이 스 를 검색 해 보 세 요.그리고 이 값 과 일치 합 니 다. 사실 단 방향 맵 을 찾 는 과정 은 해독 이 아 닙 니 다.물론 풀 수 있 는 것 도 있 습 니 다. 네트워크 에는 MD5 해 제 를 위 한 전용 소프트웨어 가 많 습 니 다. 사전 설정 을 통 해 해 해 제 됩 니 다.
되 돌 릴 수 있 는 알고리즘 이 있 습 니까?
가 역 암호 화 알고리즘: 생 성 된 암호 수 는 암호 자체 의 길이 에 의 해 결 정 됩 니 다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
using System.IO;
namespace GlacierV2.Common
{
public static class Global
{
private static int _newDBPrimaryKeySeed = 0;
#region
private static SymmetricAlgorithm mobjCryptoService = new RijndaelManaged();
///
///
///
///
private static byte[] GetLegalKey()
{
string sTemp = "xfsdfgsfgsdgsdfgsdfg";
mobjCryptoService.GenerateKey();
byte[] bytTemp = mobjCryptoService.Key;
int KeyLength = bytTemp.Length;
if (sTemp.Length > KeyLength)
sTemp = sTemp.Substring(0, KeyLength);
else if (sTemp.Length < KeyLength)
sTemp = sTemp.PadRight(KeyLength, ' ');
return ASCIIEncoding.ASCII.GetBytes(sTemp);
}
///
/// IV
///
/// IV
private static byte[] GetLegalIV()
{
string sTemp = "swetwerehetyeryertyerty";
mobjCryptoService.GenerateIV();
byte[] bytTemp = mobjCryptoService.IV;
int IVLength = bytTemp.Length;
if (sTemp.Length > IVLength)
sTemp = sTemp.Substring(0, IVLength);
else if (sTemp.Length < IVLength)
sTemp = sTemp.PadRight(IVLength, ' ');
return ASCIIEncoding.ASCII.GetBytes(sTemp);
}
///
///
///
///
///
public static string Encrypto(string Source)
{
byte[] bytIn = UTF8Encoding.UTF8.GetBytes(Source);
MemoryStream ms = new MemoryStream();
mobjCryptoService.Key = GetLegalKey();
mobjCryptoService.IV = GetLegalIV();
ICryptoTransform encrypto = mobjCryptoService.CreateEncryptor();
CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write);
cs.Write(bytIn, 0, bytIn.Length);
cs.FlushFinalBlock();
ms.Close();
byte[] bytOut = ms.ToArray();
return Convert.ToBase64String(bytOut);
}
///
///
///
///
///
public static string Decrypto(string Source)
{
byte[] bytIn = Convert.FromBase64String(Source);
MemoryStream ms = new MemoryStream(bytIn, 0, bytIn.Length);
mobjCryptoService.Key = GetLegalKey();
mobjCryptoService.IV = GetLegalIV();
ICryptoTransform encrypto = mobjCryptoService.CreateDecryptor();
CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read);
StreamReader sr = new StreamReader(cs);
return sr.ReadToEnd();
}
#endregion
}
}
원본 데 이 터 를 알 고 암호 화 되 돌 릴 수 있 습 니 다.원본 데 이 터 를 모 르 면 암호 화 를 거 스 를 수 없습니다.
하나의 생각 일 뿐 아직 실천 에 옮 기지 않 았 습 니 다. 안전 암호 화 라 는 전문 적 인 것 이 아니 라 MD5 암호 화 를 본 후에 갑자기 이런 생각 이 들 었 습 니 다. 그리고 ider 가 생 겼 습 니 다.
123 = MD5 = 202 cb962ac 59075b964b 07152 d234b 70 2. 202 cb962ac 59075b964b 07152 d234b 70 을 202999896799595959595959595959595959595959595959595959595971521002349870 3. 그리고 0 - 9 개의 알고리즘 을 준비 하여 원시 데 이 터 를 위의 순서에 따라 각각 알고리즘 암호 화 4. 암호 화 한 후에 원시 데 이 터 를 모 르 기 때문에 MD5 암호 화 를 할 수 없고 알고리즘 암호 화 과정 을 모른다.복호화 가 완료 되 지 않 지만 원시 데 이 터 를 알 면 MD5 암호 화 를 할 수 있 습 니 다. 그리고 알고리즘 과정 을 내 놓 으 면 가 역 알고리즘 5 를 완성 할 수 있 습 니 다. 하나의 생각 일 뿐 과정 도 상세 하지 않 습 니 다. 이 방면 에 대해 연구 하고 자 하 는 것 이 있 으 면 같이 연구 하 세 요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Rails Turbolinks를 페이지 단위로 비활성화하는 방법원래 Turobolinks란? Turbolinks는 링크를 생성하는 요소인 a 요소의 클릭을 후크로 하고, 이동한 페이지를 Ajax에서 가져옵니다. 그 후, 취득 페이지의 데이터가 천이 전의 페이지와 동일한 것이 있...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.