>백엔드 개발 >Golang >AES-GSM 방법을 사용하여 GO로 인코딩된 C# 문자열을 해독합니다.

AES-GSM 방법을 사용하여 GO로 인코딩된 C# 문자열을 해독합니다.

PHPz
PHPz앞으로
2024-02-10 09:39:091174검색

使用 AES-GSM 方法解密在 GO 中编码的 C# 字符串

php 편집기 Xigua는 GO 언어에서 C# 문자열을 해독하는 방법인 AES-GSM을 소개합니다. AES-GSM은 AES(Advanced Encryption Standard)와 GSM(Global System for Mobile Communications)의 장점을 결합한 고급 암호화 표준입니다. AES-GSM 방법을 사용하면 GO로 인코딩된 C# 문자열을 효과적으로 해독하여 데이터를 안전하게 전송하고 보호할 수 있습니다. 이 기사에서는 독자가 이 암호화 및 복호화 기술을 쉽게 익힐 수 있도록 AES-GSM의 원리와 사용 단계를 자세히 소개합니다.

질문 내용

go에 aes-gcm과 암호 문구로 암호화된 문자열이 있고 C#에서 해독하려고 합니다. 그러나 C#에서 해독하는 올바른 방법을 찾을 수 없습니다. 내가 받고 있는 오류는 블록의 길이인 iv의 크기가 C# 암호 해독 알고리즘에 적합하지 않다고 언급하고 있습니다. 이동 값은 다음과 같습니다.

으아악 으아악 으아악

고 코드: https://go.dev/play/p/jn8ie61ntzw

go에 있는 복호화 코드입니다

으아악

go의 암호화 코드입니다

으아악

복호화된 동일한 로그인을 C#에서 복제하여 최종 문자열을 복호화하고 생성할 수 있도록 노력 중입니다.

C#에서 여러 가지 암호 해독 논리를 시도했는데 여기에서 찾을 수 있습니다.

  • https://dotnetfiddle.net/32sb5m 이 함수는 system.security.cryptography 네임스페이스를 사용하지만 잘못된 iv 크기가 발생합니다.

  • https://dotnetfiddle.net/wxkuyr .net 5에 대한 위의 수정된 버전은 동일한 결과를 생성합니다

  • https://dotnetfiddle.net/6iftps Bouncy Castle 라이브러리를 사용하면 "gcm의 mac 확인 실패" 오류가 발생합니다

  • https://dotnetfiddle.net/8mjs3g rfc2898derivebytes 메서드를 사용하는 대체 접근 방식에서는 "계산된 인증 토큰이 입력 인증 토큰과 일치하지 않습니다"라는 오류가 발생합니다.

현재 사용되는 방법이 올바른가요, 아니면 C#에서 aes-gcm을 해독하는 다른 방법이 있나요? C#과 관련하여 이러한 오류를 우회하려면 어떻게 해야 합니까?

Solution

마지막 코드에 가까워졌습니다. go 생성된 암호문의 끝에 인증 태그를 추가합니다. 여기에서 올바르게 추출했습니다:

으아악

그러나 실제 암호화된 텍스트 + 인증 토큰이 포함된 배열은 암호화된 텍스트만 포함하는 것으로 계속 처리합니다. 수정하려면 압축도 풀어보세요:

으아악

위 내용은 AES-GSM 방법을 사용하여 GO로 인코딩된 C# 문자열을 해독합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제