>  기사  >  위챗 애플릿  >  WeChat 공개 플랫폼 개발: 메시지 암호화

WeChat 공개 플랫폼 개발: 메시지 암호화

高洛峰
高洛峰원래의
2017-02-27 13:36:582989검색

얼마 전까지만 해도 WeChat의 기업 계정에서는 메시지 암호화를 필수로 사용했는데, 이후 공식 계정에서도 선택적 메시지 암호화 옵션을 추가했습니다. 현재 기업 계정과 공식 계정의 암호화 방법은 동일합니다(형식은 약간 다를 수 있음).

암호화 설정

공식 계정 백엔드에서 "개발자 센터"에 들어가면 Url 도킹 설정을 볼 수 있습니다:

WeChat 공개 플랫폼 개발: 메시지 암호화

[설정 수정]을 클릭하면 수정 페이지로 들어갈 수 있습니다.

WeChat 공개 플랫폼 개발: 메시지 암호화

세 가지 암호화 방법이 있습니다.

일반 텍스트 모드입니다. 원본 메시지 형식

호환 모드, 일반 텍스트 및 암호 텍스트가 공존합니다. 공식적으로 출시된 제품은 사용하지 않는 것이 좋습니다(아직 일반 텍스트가 포함되어 있어 암호화 효과를 얻을 수 없기 때문입니다)

안전 모드, 이 모드에서는 메시지가 암호화되며 개발자 서버는 공식 알고리즘을 통해 이를 해독하여 일반 텍스트 모드에서 원본 메시지를 얻을 수 있습니다.

암호화된 메시지의 경우 반환된 정보도 암호화되어야 합니다.

암호화된 정보 처리

Senparc.Weixin.MP는 세 가지 유형의 메시지를 자동으로 판단합니다. 개발 과정에서 어떠한 복호화 및 암호화 프로세스에도 주의를 기울일 필요가 없으며 여전히 그렇습니다. "일반 텍스트 모드" 개발 프로세스에 남아 있습니다.

해당 MessageHandler에서는 일부 매개변수를 통해 현재 암호화 상태를 알 수 있습니다.

messageHandler.UsingEcryptMessage: 암호화된 정보 사용 여부(호환 모드 및 보안 모드 포함)

MessageHandler.UsingCompatibilityModelEcryptMessage: 메시지 암호화에 호환 모드가 사용되는지 여부

위 두 속성의 조합을 통해 계정이 현재 어떤 암호화 모드를 사용하고 있는지 알 수 있습니다(물론 대부분의 경우 개발자는 신경 쓸 필요가 없습니다).

더 나은 정보 추적을 위해 MessageHandler는 FinalResponseDocument 속성을 추가했습니다.

messageHandler.ResponseDocument: 응답 데이터 XML 객체의 일반 텍스트 구조

messageHandler.FinalResponseDocument: final 서버로 반환되는 XML 개체는 암호화되지 않은 경우 ResponseDocument와 일치합니다. 그렇지 않으면 자동으로 암호화됩니다.

암호화 원칙

암호화 알고리즘 정보(샘플 다운로드 포함) 여러 언어) ) 공식 도움말 문서에서 찾을 수 있습니다: http://mp.weixin.qq.com/wiki/index.php?title=%E6%8A%80%E6%9C%AF%E6%96% B9%E6 %A1%88

여기서 설명하고 싶은 것은 EncodingAESKey 입니다. 공식적인 설명이 좀 헷갈립니다. 실제로 EncodingAESKey는 AESKey의 Base64 인코딩이고 AESKey는 길이 32(a-z, A-Z, 0-9에서 선택)의 임의 문자열입니다. 32자의 Base64 인코딩 길이는 44(마지막 문자는 =)로 고정되어 있으므로 =를 제거하면 최종 43자의 EncodingAESKey가 생성됩니다. EncodingAESKey는 메시지 암호화 및 복호화 과정에서 사용되며 엄격한 기밀성이 요구됩니다.

다음은 EncodingAESKey를 생성하는 C# 코드입니다.

protected string CreateEncodingAESKey()
        {
            string aesKey = GetRadomStr(32);//获得a-z,A-Z,0-9的随机字符串
            var encodingAesKey = Convert.ToBase64String(Encoding.UTF8.GetBytes(aesKey), Base64FormattingOptions.None);
            return encodingAesKey.Substring(0, encodingAesKey.Length - 1);
        }


더 많은 WeChat 공개 플랫폼 개발: 메시지 암호화 관련 기사를 주목하세요. PHP 중국어 웹사이트!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.