이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 27517|회답: 1

[출처] .net/c# CryptoJS aes 암호화된 소스 코드

[링크 복사]
게시됨 2017. 10. 7. 오후 5:39:00 | | | |
최근에 시뮬레이션 후 로그인 함수를 만들었는데, 로그인 비밀번호는 CryptoJS aes로 암호화되어 있고, 그 다음 해당 알고리즘을 C#으로 작성하려고 합니다.
AES 암호화 알고리즘 소개:

고급 암호화 표준(약칭: AES)은 암호학에서 라인달 암호화라고도 하며, 미국 연방 정부가 채택한 블록 암호화 표준입니다. 이 표준은 원래 DES를 대체하는 데 사용되었으며, 전 세계적으로 분석되고 널리 사용되고 있습니다. 5년간의 선정 과정을 거쳐, 고급 암호 표준은 2001년 11월 26일 미국 국립표준기술연구소(NIST)에서 FIPS PUB 197로 발표되었고, 2002년 5월 26일 유효한 표준이 되었습니다. 2006년, 고급 암호화 표준(Advanced Encryption Standard)은 대칭키 암호학을 위한 가장 인기 있는 알고리즘 중 하나가 되었습니다.

js 알고리즘은 다음과 같습니다:



인터넷에서 온라인 AES 암호화 웹사이트를 검색해봤는데, 결과가 제 암호와는 달랐습니다. AES는 여러 모드가 있는 것 같고, 인터넷에서 다른 사람들의 소개도 본 적이 있습니다


먼저 평문과 키를 준비하는 것부터 시작하세요:
var plaintText = 'aaaa'; 평문
var keyStr = 'bbbbbbbb'; 일반적으로 키는 끈입니다  
공식 웹사이트 문서에 따르면, AES 방식은 AES-128, AES-192, AES-256을 지원하며, 암호화 과정에서 사용되는 암호화 방법은 수신 키 유형에 따라 달라지며, 그렇지 않으면 AES-256에 따라 암호화됩니다.
CryptoJS는 AES-128, AES-192, AES-256을 지원합니다. 입력한 키 크기에 따라 변형을 선택합니다. 패스프레이즈를 사용하면 256비트 키를 생성합니다.
자바는 128비트에 따라 주어졌지만, 문자열이기 때문에 프론트엔드에서 128비트로 변환해야 합니다.
처음에는 CryptoJS.enc.Hex.parse를 사용하면 128비트 키로 올바르게 변환될 거라 생각했습니다. 하지만 그 외에는...
여러 번 시도한 끝에 CryptoJS.enc.Utf8.parse 메서드를 사용해 키를 128비트로 변환해야 합니다. 여러 번 시도했다고 하니 그 이유는 알려지지 않았고, 나중에 더 깊이 연구할 예정입니다.
문자열 타입의 키를 사용하기 전에 uft8로 파싱해야 합니다
var key = CryptoJS.enc.Utf8.parse(keyStr);  
백엔드는 PKCS5Padding을 사용하지만, CryptoJS를 사용할 때는 오프셋이 전혀 없었습니다.
암호화
var encryptedData = CryptoJS.AES.encrypt(plaintText, key, {  
    모드: CryptoJS.mode.ECB,
    패딩: CryptoJS.pad.Pkcs7
});
CryptoJS가 생성하는 암호문은 객체이기 때문에, 이를 직접 Base64로 인코딩된 문자열로 변환하면 encryptedData.ciphertext 위의 속성이 백엔드에서 요구하는 문자열 형식으로 변환됩니다.
var encryptedBase64Str = encryptedData.toString();
출력: 'RJcecVhTqCHHnlibzTypzuDvG8kjWC+ot8JuxWVdLgY='
console.log(암호화된 Base64Str);
자바와 같은 암호문을 얻으려면 encryptedData에서 ciphertext.toString()을 읽어야 합니다
var encryptedStr = encryptedData.ciphertext.toString();  
출력: '44971e715853a821c79e589bcd3ca9cee0ef1bc923582fa8b7c26ec5655d2e06'
console.log(암호화된 스트라);  
암호화된 암호문은 128비트 문자열이기 때문에 복호화 시 Base64 인코딩 형식으로 변환해야 합니다.
그 다음에는 CryptoJS.enc.Hex.parse 메서드를 사용해 16진수로 변환하고, CryptoJS.enc.Base64.stringify를 사용해 Base64 인코딩 문자열로 변환한 다음, CryptoJS.AES.decrypt 메서드로 전달해 복호화해야 합니다.
문자열 타입의 암호문을 얻으려면 먼저 Hex 메서드로 파싱해야 합니다
var encryptedHexStr = CryptoJS.enc.Hex.parse(encryptedStr);
암호문을 Base64 문자열로 변환하기
오직 Base64 유형의 문자열 암호문만이 이를 복호화할 수 있습니다
var encryptedBase64Str = CryptoJS.enc.Base64.stringify(encryptedHexStr);  
Base64 인코딩으로 변환된 문자열은 복호화 작업을 위해 CryptoJS.AES.decrypt 메서드에 전달할 수 있습니다.
복호화
var decryptedData = CryptoJS.AES.decrypt(encryptedBase64Str, key, {  
    모드: CryptoJS.mode.ECB,
    패딩: CryptoJS.pad.Pkcs7
});
CryptoJS 복호화 후에도 여전히 객체이며, 이를 평문으로 변환하려면 Utf8 형식의 문자열로 변환해야 합니다.
복호화 후에는 평문 문자열을 Utf8처럼 전치해야 합니다
var decryptedStr = decryptedData.toString(CryptoJS.enc.Utf8);  
console.log(decryptedStr); '아




다음은 AES의 .NET/C# 구현 소스 코드입니다:







이전의:[12306] 죄송합니다, 조수석 운전을 너무 자주 하시니 내일 다시 시도해 주세요
다음:C#은 프로세스 메모리 매핑, 파일 공유 메모리를 구현합니다
게시됨 2018. 5. 29. 오전 12:27:20 |
빅 가문의 고급 소스 코드를 참고하세요
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com