PHP 대칭 암호 화 함수 데이터 암호 화 복호화
6331 단어 php대칭 암호 화 복호화
대칭 암호 화
발송 자 는 명문 을 키 와 알고리즘 으로 처리 하여 비밀문서 로 보 내 고 수신 자 는 키 와 알고리즘 을 사용 하여 비밀문서 로 처리 하 며 수신 자 는 같은 키 로 데 이 터 를 암호 화하 고 복호화 합 니 다.
같은 키 를 사용 하여 암호 화,복호화 하기 때문에 안전성 은 알고리즘 뿐만 아니 라 키 의 안전 도 중요 합 니 다.
물론 키 가 복잡 할 수록 좋 은 것 은 아 닙 니 다.반대로 키 는 작 습 니 다.키 가 클 수록 암호 화가 강하 지만 암호 화 와 복호화 과정 이 느 릴 수록 키 의 크기 는 안전성 도 고려 해 야 하고 효율 도 고려 해 야 합 니 다.
대칭 암호 화 알고리즘 의 특징 은 알고리즘 이 공개 되 고 계 산 량 이 적 으 며 암호 화 속도 가 빠 르 고 암호 화 효율 이 높다 는 것 이다.효율 이 높다 는 장점 이 없 으 면 비대 칭 암호 화 를 직접 사용 하 는 것 이 낫다.
또한 사용자 가 대칭 암호 화 알고리즘 을 사용 할 때마다 다른 사람 이 모 르 는 유일한 열 쇠 를 사용 해 야 하기 때문에 수신 자 쌍방 이 가지 고 있 는 열쇠 의 수량 이 기 하급 수적 으로 증가 하고 키 관리 가 사용자 의 부담 이 될 수 있다.
대칭 암호 화 알고리즘 은 분포 식 네트워크 시스템 에서 사용 하기 가 어렵 습 니 다.주로 키 관리 가 어렵 고 사용 원가 가 높 기 때 문 입 니 다.
2.비대 칭 암호 화
비대 칭 암호 화 는 상대 적 으로 안전 합 니 다.한 쌍 의 키 를 사용 하여 키 와 개인 키 를 공개 하여 각각 암호 화 와 복호화 에 사용 합 니 다.비밀 키 는 한 측 만 안전하게 보관 할 수 있 고 누설 할 수 없 으 며 공개 키 는 요청 한 사람 에 게 보 낼 수 있다.
가장 흔히 볼 수 있 는 비대 칭 암호 화 는 바로 은행 시스템,결제 플랫폼 일 것 이다.예 를 들 어 저희 가 알 리 페 이 나 은 련 결제 인 터 페 이 스 를 신청 할 때 공개 키 를 얻 을 수 있 습 니 다.쇼핑 몰 에서 결 제 를 하 는 것 은 공개 키 로 정 보 를 플랫폼 에 암호 화하 고 플랫폼 에서 키 를 사용 하여 귀하 의 정 보 를 복호화 하고 결제 작업 을 하 는 것 입 니 다.
비대 칭 암호 화 는 안전 하지만 대칭 암호 화 에 비해 매우 느 립 니 다.그래서 우리 가 일반적으로 처리 하면 대부분 대칭 암호 화로 메 시 지 를 전송 하지만 대칭 암호 화 에 사용 되 는 키 는 비대 칭 암호 화 방식 으로 보 낼 수 있 습 니 다.당신 이 신청 한 결제 인 터 페 이 스 를 생각해 보 세 요.키 한 쌍 을 주 었 나 요?^.^
3.결합 사용
대칭 적 인 암호 화 속도 가 빠 르 기 때문에 대량의 데 이 터 를 보 낼 때 사용 하 는 것 이 좋다.비대 칭 암호 화 와 복호화 가 오래 걸 리 고 속도 가 느 려 서 소량의 데 이 터 를 암호 화 하 는 데 만 적합 하지만 비대 칭 암호 화의 안전성 은 매우 높다.
장점 을 살 리 고 단점 을 피한다.대칭 암호 화 된 키 를 비대 칭 암호 화 된 공개 키 로 암호 화 한 다음 에 보 내 고 수신 자 는 비밀 키 를 사용 하여 암호 화 된 키 를 복호화 한 다음 에 쌍방 은 대칭 암호 화 를 사용 하여 의사 소통 을 할 수 있다.
프로젝트 에서 사용 하 는 방법 은 밝 히 는 것 이 좋 지 않 습 니 다.여기에 두 개의 다른 예 만 열거 하 세 요.첫 번 째 는 ucenter 중,두 번 째 는 간단명료 한 마법 에서 본 것 이다.
주의해 야 할 것 은 base 64 알고리즘 이기 때문에 암호 화 된 문자열 에+\가 나타 날 수 있 습 니 다.url 에 사용 되 는 것 이 우호 적 이지 않 으 면 외부 나 방법 을 바 꾸 거나 재 귀적 인 호출 을 검증 할 수 있 습 니 다.
/**
*
* @param string $string
* @param string $operation (ENCODE | DECODE), DECODE
* @param string $key
* @param int $expiry , , ,0
* @return string base64_encode
*/
function _authcode ($string, $operation = 'DECODE', $key = 'Ruesin', $expiry = 0)
{
$ckey_length = 4;
$key = md5($key);
$keya = md5(substr($key, 0, 16));
$keyb = md5(substr($key, 16, 16));
$keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0,
$ckey_length) : substr(md5(microtime()), - $ckey_length)) : '';
$cryptkey = $keya . md5($keya . $keyc);
$key_length = strlen($cryptkey);
$string = $operation == 'DECODE' ? base64_decode(
substr($string, $ckey_length)) : sprintf('%010d',
$expiry ? $expiry + time() : 0) . substr(md5($string . $keyb), 0, 16) .
$string;
$string_length = strlen($string);
$result = '';
$box = range(0, 255);
$rndkey = array();
for ($i = 0; $i <= 255; $i ++) {
$rndkey[$i] = ord($cryptkey[$i % $key_length]);
}
for ($j = $i = 0; $i < 256; $i ++) {
$j = ($j + $box[$i] + $rndkey[$i]) % 256;
$tmp = $box[$i];
$box[$i] = $box[$j];
$box[$j] = $tmp;
}
for ($a = $j = $i = 0; $i < $string_length; $i ++) {
$a = ($a + 1) % 256;
$j = ($j + $box[$a]) % 256;
$tmp = $box[$a];
$box[$a] = $box[$j];
$box[$j] = $tmp;
$result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
}
if ($operation == 'DECODE') {
if ((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) &&
substr($result, 10, 16) ==
substr(md5(substr($result, 26) . $keyb), 0, 16)) {
return substr($result, 26);
} else {
return '';
}
} else {
return $keyc . str_replace('=', '', base64_encode($result));
}
}
/*********************************************************************
:encrypt
:
:
:encrypt('str','E','nowamagic');
:encrypt(' ','D','nowamagic');
:
$string :
$operation: :E: D:
$key : ( );
*********************************************************************/
function encrypt($string,$operation,$key='')
{
$key=md5($key);
$key_length=strlen($key);
$string=$operation=='D'?base64_decode($string):substr(md5($string.$key),0,8).$string;
$string_length=strlen($string);
$rndkey=$box=array();
$result='';
for($i=0;$i<=255;$i++)
{
$rndkey[$i]=ord($key[$i%$key_length]);
$box[$i]=$i;
}
for($j=$i=0;$i<256;$i++)
{
$j=($j+$box[$i]+$rndkey[$i])%256;
$tmp=$box[$i];
$box[$i]=$box[$j];
$box[$j]=$tmp;
}
for($a=$j=$i=0;$i<$string_length;$i++)
{
$a=($a+1)%256;
$j=($j+$box[$a])%256;
$tmp=$box[$a];
$box[$a]=$box[$j];
$box[$j]=$tmp;
$result.=chr(ord($string[$i])^($box[($box[$a]+$box[$j])%256]));
}
if($operation=='D')
{
if(substr($result,0,8)==substr(md5(substr($result,8).$key),0,8))
{
return substr($result,8);
}
else
{
return'';
}
}
else
{
return str_replace('=','',base64_encode($result));
}
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Laravel - 변환된 유효성 검사 규칙으로 API 요청 제공동적 콘텐츠를 위해 API를 통해 Laravel CMS에 연결하는 모바일 앱(또는 웹사이트) 구축을 고려하십시오. 이제 앱은 CMS에서 번역된 콘텐츠를 받을 것으로 예상되는 다국어 앱이 될 수 있습니다. 일반적으로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.