얼마 전까지만 해도 WeChat의 기업 계정에서는 메시지 암호화를 필수로 사용했는데, 이후 공식 계정에서도 선택적 메시지 암호화 옵션을 추가했습니다. 현재 기업 계정과 공식 계정의 암호화 방법은 동일합니다(형식은 약간 다를 수 있음).
암호화 설정
공식 계정 백엔드에서 "개발자 센터"에 들어가면 Url 도킹 설정을 볼 수 있습니다:
[설정 수정]을 클릭하면 수정 페이지로 들어갈 수 있습니다.
세 가지 암호화 방법이 있습니다.
일반 텍스트 모드입니다. 원본 메시지 형식
호환 모드, 일반 텍스트 및 암호 텍스트가 공존합니다. 공식적으로 출시된 제품은 사용하지 않는 것이 좋습니다(아직 일반 텍스트가 포함되어 있어 암호화 효과를 얻을 수 없기 때문입니다)
안전 모드, 이 모드에서는 메시지가 암호화되며 개발자 서버는 공식 알고리즘을 통해 이를 해독하여 일반 텍스트 모드에서 원본 메시지를 얻을 수 있습니다.
암호화된 메시지의 경우 반환된 정보도 암호화되어야 합니다.
암호화된 정보 처리
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 중국어 웹사이트!