>  기사  >  백엔드 개발  >  PHP에서 대칭 암호화 알고리즘 구현

PHP에서 대칭 암호화 알고리즘 구현

墨辰丷
墨辰丷원래의
2018-05-26 16:42:381921검색

최근에 갑자기 기밀 사항을 데이터베이스에 저장하고 싶었는데, 데이터베이스에 들어가도 저장된 내용을 다른 사람이 알 수 없게 하는 방법에 대해 생각했는데 유일한 방법은 암호화하는 것입니다. 직접 보면 대칭 암호화 알고리즘을 찾아서 보고 싶을 때 해독할 수 있습니다. 다음은 PHP에서 간단한 대칭 암호화 알고리즘의 구현을 소개합니다.

머리말

PHP 구문 환경에서 인터넷에서 PHP에 대한 좋은 대칭 암호화 알고리즘을 찾았습니다. urlencode 및 urldecode, base64_encode 및 base64_decode와 함께 제공되는 대칭 알고리즘이 있지만 이러한 내장 알고리즘은 암호화 알고리즘이라고 부를 수 없으며 인코딩 방법이라고만 부를 수 있습니다. 그러나 이를 사용하여 간단한 암호화 및 암호 해독 알고리즘을 구현하기 위한 일부 처리를 수행할 수 있습니다.

이번에는 base64를 사용하여 암호화 및 복호화 알고리즘을 적용했습니다. 일반적으로 base64_encode($str)에 의해 생성된 문자열을 사용합니다. 아무런 처리 없이 base64_decode()는 이전 문자열로 다시 변환할 수 있습니다. base64_encode() 이후에 문자열로 변환하면 다시 변환할 수 없습니다. base64_encode($str)产生的字符串,不经过任何的加工的话,base64_decode()就能转回我们之前的字符串;可是如果我们在base64_encode()之后的字符串里插入几个字符呢,那他就转不回来了,即使转过来也不是我们自己的字符串。

示例代码如下:

 <?php
 $content = "大家好,我是中国人,你是谁";

 /**
 * 简单对称加密算法之加密
 * @param String $string 需要加密的字串
 * @param String $skey 加密EKY
 * @return String
 */
 function encode($string = &#39;&#39;, $skey = &#39;wenzi&#39;) {
 $strArr = str_split(base64_encode($string));
 $strCount = count($strArr);
 foreach (str_split($skey) as $key => $value)
  $key < $strCount && $strArr[$key].=$value;
 return str_replace(array(&#39;=&#39;, &#39;+&#39;, &#39;/&#39;), array(&#39;O0O0O&#39;, &#39;o000o&#39;, &#39;oo00o&#39;), join(&#39;&#39;, $strArr));
 }

 /**
 * 简单对称加密算法之解密
 * @param String $string 需要解密的字串
 * @param String $skey 解密KEY
 * @return String
 */
 function decode($string = &#39;&#39;, $skey = &#39;wenzi&#39;) {
 $strArr = str_split(str_replace(array(&#39;O0O0O&#39;, &#39;o000o&#39;, &#39;oo00o&#39;), array(&#39;=&#39;, &#39;+&#39;, &#39;/&#39;), $string), 2);
 $strCount = count($strArr);
 foreach (str_split($skey) as $key => $value)
  $key <= $strCount && $strArr[$key][1] === $value && $strArr[$key] = $strArr[$key][0];
 return base64_decode(join(&#39;&#39;, $strArr));
 }

 echo &#39;<pre class="brush:php;toolbar:false">&#39;;
 echo "string : " . $content . " <br />";
 echo "encode : " . ($enstring = encode($content)) . &#39;<br />&#39;;
 echo "decode : " . decode($enstring);

 exit();

上面的算法里我们可以看到:我们把base64_encode()

샘플 코드는 다음과 같습니다.

rrreee

위 알고리즘에서 볼 수 있듯이 base64_encode()에 의해 생성된 문자를 삽입합니다. > 우리는 미리 키를 설정한 후 그 안에 있는 특수문자를 교체합니다. 다른 사람들이 이러한 문자열을 보더라도 그것이 무엇인지 알 수 없습니다. 물론 여기서는 키를 문자열에 거꾸로 삽입하고, base64로 키를 삽입한 다음 키를 삽입한 다음 다시 base64로 삽입하는 등 약간의 개선을 이룰 수 있습니다.

물론 복호화는 암호화의 반대 방향입니다. 잠시 생각한 끝에 복호화의 원리를 깨달았습니다. 문자열에 일부 문자를 삽입하기 전에 이제 복호화할 때 문자를 추출해야 합니다. 암호화된 문자열은 각 배열의 2개 요소로 그룹화한 다음 두 번째 문자가 키에 있는지 확인합니다. 그렇다면 첫 번째 문자는 원래 base64의 문자입니다. 위 내용은 이 글의 전체 내용입니다. 모든 분들의 공부에 도움이 되었으면 좋겠습니다.

관련 권장 사항: PHP는 재귀를 사용합니다
알고리즘

배열의 무한 순회

PHP는 일반적으로 사용되는 정렬
알고리즘

자세한 예제 설명

PHP는 일반적으로 사용되는

알고리즘 🎜자세한 설명 데이터 구조 예 🎜🎜🎜🎜🎜🎜🎜🎜🎜

위 내용은 PHP에서 대칭 암호화 알고리즘 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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