초등학교 승 평론 Api 서명 알고리즘
제3자 애플 리 케 이 션 과 API 서버 간 통신 의 안전성 을 확보 하고 Secret Key 도용, 데이터 변조 등 악의 적 인 공격 행 위 를 방지 하기 위해 플랫폼 API 서버 를 열 어 서명 체 제 를 사용 하고 오픈 플랫폼 API 호출 에 적용 하려 면 하나의 서명 을 계산 해 야 한다.
요청 시작 방식
응용 클 라 이언 트 를 통 해 시 작 된
페이지 에 있 는 JavaScript, Flash 에 있 는 ActionScript 나 핸드폰, 데스크 톱 클 라 이언 트 프로그램 을 통 해 시작 합 니 다.서명 은 요청 인자 와 Session Secret (모든 사용자 의 Session Key 에 대응 하 는 키) 가 지정 한 암호 화 알고리즘 을 통 해 생 성 된 문자열 입 니 다.
제3자 응용 서버 를 통 해 시 작 된
서명 은 요청 파라미터 와 응 용 된 비밀 키 가 대응 하 는 암호 화 알고리즘 을 통 해 생 성 됩 니 다.
서명 생 성
서명 생 성 안 함
생 성 되 지 않 은 서명 도 존재 합 니 다. 예 를 들 어 웹 사이트 개발 전후 단 분리 등 입 니 다.그러나 session 의 특성 을 바탕 으로 정상 적 인 업무 처 리 를 지원 할 수 있 지만 필요 한 준 비 를 해 야 합 니 다.
로그 인 인증
post 방식 으로 데 이 터 를 제출 합 니 다.
md5 (uniqid (rand (), TRUE) 와 같은 token 토 큰 을 구성 하면 실효 시간 을 설정 할 수 있 습 니 다.
referer, 동원 정책 계획 검증
Api 권한 부여 등등.
서명 키 포함
key 와 sign 파 라 메 터 를 추가 하고 인증 과 파라미터 변경 문 제 를 해결 하 며 비밀 키 가 유출 되 지 않도록 요청 합 니 다.
대응 하 는 키, 시 크 릿 분배
서명 생 성 규칙
요청 매개 변수 에 시간 스탬프 timestamp 를 추가 하면 요청 이 만 료 되 었 는 지 확인 할 수 있 습 니 다.
$secret 를 암호 화하 여 사용 합 니 다. 데이터 안전 을 위해 요청 매개 변수 에 나타 나 지 마 십시오.
업그레이드 최적화
안전 이 상대 적 으로 높 은 시스템 에 있어 서명 회 는 자신 이 지정 한 복잡 한 규칙 을 사용 하고 header, body 는 모두 해당 하 는 처 리 를 한다.예 를 들 어 기업 메시지, 전자 주문 정보 등 이다.
데이터 암호 화 / 인 코딩 알고리즘 목록
1. 상용 키 알고리즘
키 알고리즘 은 민감 한 데이터, 요약, 서명 등 정 보 를 암호 화 하 는 데 사 용 됩 니 다. 자주 사용 하 는 키 알고리즘 은 다음 과 같 습 니 다.
DES (Data Encryption Standard): 데이터 암호 화 기준 으로 속도 가 빠 르 고 대량의 데 이 터 를 암호 화 하 는 장소 에 적 용 됩 니 다.
3DES (Triple DES): DES 를 기반 으로 한 데 이 터 를 세 개의 서로 다른 키 로 세 번 암호 화하 여 강도 가 높 습 니 다.
RC2 와 RC4: 길 어 지 는 키 로 대량의 데 이 터 를 암호 화하 여 DES 보다 빠르다.
IDEA (International DataEncryption Algorithm) 국제 데이터 암호 화 알고리즘 은 128 비트 키 를 사용 하여 매우 강 한 안전성 을 제공 합 니 다.
RSA: RSA 회사 에서 발명 한 키 가 길 어 지 는 것 을 지원 하 는 공공 키 알고리즘 입 니 다. 암호 화 되 어야 할 파일 의 빠 른 길이 도 가 변 적 입 니 다.
DSA (Digital Signature Algorithm): 디지털 서명 알고리즘 은 표준 DSS (디지털 서명 표준) 입 니 다.
AES (Advanced Encryption Standard): 고급 암호 화 기준 은 차세 대 암호 화 알고리즘 기준 으로 속도 가 빠 르 고 안전 등급 이 높 습 니 다. 현재 AES 표준 의 실현 은 Rijndael 알고리즘 입 니 다.
BLOWFISH 는 길 어 지 는 키 를 사용 합 니 다. 길 이 는 448 비트 에 달 하고 운행 속도 가 빠 릅 니 다.
ElGamal, Deffie - Hellman, 신형 타원 곡선 알고리즘 ECC 등 다른 알고리즘.
2. 단 방향 산열 알고리즘
단 방향 산열 함 수 는 일반적으로 메시지 요약, 키 암호 화 등에 사 용 됩 니 다. 흔히 볼 수 있 는 것 은:
MD5 (Message Digest Algorithm 5): RSA 데이터 보안 회사 가 개발 한 단 방향 해시 알고리즘 으로 MD5 가 광범 위 하 게 사용 되 고 서로 다른 길이 의 데이터 블록 을 암호 로 128 비트 의 수치 로 연산 할 수 있 습 니 다.
SHA (Secure Hash Algorithm) 는 새로운 해시 알고리즘 으로 임의의 길이 의 데이터 연산 에 160 비트 의 수 치 를 생 성 할 수 있 습 니 다.
MAC (Message Authentication Code): 메시지 인증 코드 는 키 를 사용 하 는 단 방향 함수 로 시스템 이나 사용자 간 에 파일 이나 메 시 지 를 인증 할 수 있 습 니 다.HMAC (메시지 인증 에 사용 되 는 키 해시 법) 가 바로 이러한 함수 의 한 예 입 니 다.
CRC (Cyclic Redundancy Check): 순환 중복 검사 코드, CRC 검 사 는 간단 하고 오류 검사 능력 이 강하 기 때문에 각종 데이터 검사 응용 에 널리 사용 된다.시스템 자원 을 적 게 차지 하고 소프트 하드웨어 로 모두 실현 할 수 있 으 며 데이터 전송 오류 검 사 를 하 는 좋 은 수단 입 니 다. (CRC 는 엄격 한 의미 의 해시 알고리즘 이 아니 지만 그 역할 은 해시 알고리즘 과 대체적으로 같 기 때문에 이러한 것 으로 귀 속 됩 니 다)
3. 기타 데이터 알고리즘
기타 데이터 알고리즘 은 Base 64, Quoted Printable, EBCDIC 등 상용 인 코딩 알고리즘 과 명문 (ASCII, Unicode 등) 변환 등 을 포함한다.예시 코드, 참고 만 제공:
/**
*
* @param array $params API , sign
* @return string
*/
function getSignature($params, $secret){
$str = '';
ksort($params);
foreach ($params as $k => $v) {
$str .= "$k=$v";
}
$str .= $secret;
return md5($str);
}
/*
* ,$args ,$key
*/
function makeSignature($args, $key){
if(isset($args['sign'])) {
$oldSign = $args['sign'];
unset($args['sign']);
} else {
$oldSign = '';
}
ksort($args);
$requestString = '';
foreach($args as $k => $v) {
$requestString .= $k . '=' . urlencode($v);
}
$newSign = hash_hmac("md5",
strtolower($requestString) , $key);
return $newSign;
}
pubkey = $pubkey;
$this->privkey = $privkey;
}
/*
* *
*/
public function encrypt($data) {
if (empty($data)) {
return null;
}
$pem = "-----BEGIN PUBLIC KEY-----
" . chunk_split($this->pubkey, 64, "
") . "-----END PUBLIC KEY-----
";
$key = openssl_pkey_get_public($pem);
$resultb = "";
$dataArray = str_split($data, 117);
foreach ($dataArray as $d) {
if (openssl_public_encrypt($d, $encrypted, $key)) {
$resultb .= $encrypted; } else return null;
}
return base64_encode($resultb);
}
/*
* *
*/
public function decrypt($data) {
$pem = "-----BEGIN PRIVATE KEY-----
" . chunk_split($this->privkey, 64, "
") . "-----END PRIVATE KEY-----
";
$key = openssl_pkey_get_private($pem);
$resultb = "";
$dataArray = str_split(base64_decode($data), 128);
foreach ($dataArray as $d) {
if (openssl_private_decrypt($d, $encrypted, $key)) {
$resultb .= $encrypted;
} else return null;
}
return $resultb;
}
/*
*
*/
public function md5($data) {
$xtt=urlencode(base64_encode(md5($data)));
//
return $xtt;
}
}
crc_table[(($crc>>8) ^ ord($ptr[$i]))] ^ (($crc<<8) & 0x00FFFF);
$ret = sprintf('%02x%02x', floor($crc/256),$crc%256);
return strtoupper($ret);
}
}
key = $key;
$this->iv = $iv;
}
function encrypt($str) {
$size = mcrypt_get_block_size(MCRYPT_DES, MCRYPT_MODE_CBC);
$str = $this->pkcs5Pad($str, $size);
// echo $size.'
';
// echo $str."
";
// echo $this->key.'
';
// echo $this->iv.'
';
// return mcrypt_cbc(MCRYPT_DES, $this->key, $str, MCRYPT_ENCRYPT, $this->iv);
$cipher = mcrypt_module_open(MCRYPT_DES, '', 'cbc', '');
mcrypt_generic_init($cipher, $this->key, $this->iv);
return mcrypt_generic($cipher, $str);
}
function decrypt($str) {
$strBin = $str;
// $str = mcrypt_cbc(MCRYPT_DES, $this->key, $strBin, MCRYPT_DECRYPT, $this->iv);
$cipher = mcrypt_module_open(MCRYPT_DES, '', 'cbc', '');
mcrypt_generic_init($cipher, $this->key, $this->iv);
$str = mdecrypt_generic($cipher, $str);
$str = $this->pkcs5Unpad($str); return $str;
}
function pkcs5Unpad($text) {
$pad = ord($text{strlen($text) - 1});
if ($pad > strlen($text)) return false;
if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) return false;
return substr($text, 0, -1 * $pad);
}
function pkcs5Pad($text, $blocksize) {
$pad = $blocksize - (strlen($text) % $blocksize);
return $text . str_repeat(chr($pad), $pad);
} } class SaaSSafe{
private $iv;
function set_iv($i){
if($i != ''){
$this->iv = $i;
}
}
public function Encode($o_string){
$md5_string = md5($o_string);
$body_string = $md5_string.$o_string;
$key = $this->makeKey($this->iv);
$des_body_string = $this->desEn($body_string, $this->iv, $key);
$ret = base64_encode($des_body_string); return $ret;
}
public function Decode($o_string){
$de_base_string = base64_decode($o_string);
$key = $this->makeKey($this->iv);
$de_des_string = $this->desDe($de_base_string, $this->iv, $key);
$ret = substr($de_des_string, 32); return $ret;
}
function odd($o_string){
$ret = '';
for ($i=0; $iodd(substr(md5($iv),8,16));
}
}
private function desEn($o_string, $iv, $key){
$des = new DES($key, $iv);
$ret = $des->encrypt($o_string); return $ret;
}
private function desDe($o_string, $iv, $key){
$des = new DES($key, $iv);
$ret = $des->decrypt($o_string); return $ret;
}
}
만약 당신 이 더 좋 은 소감 과 건 의 를 가지 고 있다 면, 벽돌 을 치 며 함께 토론 하 는 것 을 환영 합 니 다.위 챗 공식 번호 [프로 그래 밍 기술 마이크로 공유] 를 검색 하여 대중 번호 에 관심 을 가 지 는 것 을 환영 합 니 다![프로 그래 밍 기술 마이크로 공유] 가입 을 환영 합 니 다. 가입 (596888158) 은 메 시 지 를 남기 거나 QQ: Mr. Chen (1182929304) 에 게 연락 하 십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.