이 글은 주로 참고할만한 가치가 있는 PHP의 암호화 기능을 소개합니다. 도움이 필요한 친구들이 참고할 수 있도록 공유하겠습니다.
웹사이트 개발 과정에서 일부 데이터를 분석해야 하는 경우가 종종 있습니다. (사용자 비밀번호 등) 이 글에서는 주로 PHP의 몇 가지 일반적인 암호화 기능을 소개합니다. 필요한 친구는 이를 참조할 수 있습니다
MD5 암호화:
string md5 ( string $str [, bool $raw_output = false ] )
1.md5()는 기본적으로 32자의 16진수 형식으로 해시 값을 반환합니다. 첫 번째는 암호화할 문자열이고 두 번째는 암호화할 문자열입니다. raw_output 값의 부울, 기본값은 false입니다. true로 설정하면 md5()는 원래 16비트 바이너리 형식 메시지 다이제스트를 반환합니다
2.md5()는 단방향 암호화이며 역방향 암호 해독 알고리즘이 없습니다. 수집, 열거, 충돌 등을 통해 일부 일반적인 문자열을 해독할 수 있습니다.
5
6
7
8
9
10
11
12
13
14
15
16
<?php $username='jellybool'; $password='jellybool.com'; /*简单地对字符串进行md5加密*/ echo md5($username); echo "<hr>"; echo md5($password); echo "<hr>"; /*更推荐的做法是对重要的敏感数据进行多次加密,以防被轻易破解*/ echo md5(md5($password)); /*以上输出: username:4f5436e5d72608fb647b691e8edcf42e password:7bf02cf0f4af6da4accbc73d2a175476 password(两次加密):864704bb35754f8cd0232cba6b91521b */
암호화 암호화:
string crypt ( string $str [, string $salt ] )
1.crypt()는 두 개의 매개변수를 허용합니다. 첫 번째는 암호화해야 하는 문자열이고 두 번째는 솔트 값입니다. (암호화 간섭 값입니다. 제공되지 않으면 기본적으로 PHP에서 자동으로 생성됩니다.) 해싱된 문자열 또는 13자 미만의 문자열을 반환하며, 후자는 솔트 값을 구별합니다.
2.crypt()는 md5와 동일한 단방향 암호화입니다. ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php $password='jellybool.com'; echo crypt($password); //输出:$1$Fe0.qr5.$WOhkI4/5VPo7n7TnXHh5K /*第二个$与第三个$之间的八个字符是由PHP生成的,每刷新一次就变一次 */ echo "<hr>"; echo crypt($password,"jellybool"); //输出:je7fNiu1KNaEs /*当我们要加自定义的盐值时,如例子中的jellybool作为第二个参数直接加入, 超出两位字符的会截取前两位*/ echo "<hr>"; echo crypt($password,'$1$jellybool$'); //输出:$1$jellyboo$DxH7wF7SygRpWb6XBBgfH/ /* crypt加密函数有多种盐值加密支持,以上例子展示的是MD5散列作为盐值,该方式下 盐值以$1$$的形式加入,如例子中的jellybool加在后两个$符之间, 超出八位字符的会截取前八位,总长为12位;crypt默认就是这种形式。 */ echo "<hr>"; //crypt还有多种盐值加密支持,详见手册
Sha1 암호화:
string sha1 ( string $str [, bool $raw_output = false ]
1. sha1()이 기본적으로 40자 해시 값을 반환한다는 점을 제외하면 md5와 매우 유사합니다. 첫 번째는 암호화된 문자열이고 두 번째는 raw_output의 부울 값입니다. 기본값은 false입니다. sha1()은 원래의 20비트 원본 형식 메시지를 반환합니다. Digest
2.sha1()은 역방향 복호화 알고리즘이 없는 단일 라인 암호화이기도 합니다
1 2 3 4 5 6 7 8 9 | <?php $my_intro="jellybool"; echo sha1($my_intro); //输出:c98885c04c1208fd4d0b1dadd3bd2a9ff4d042ca echo "<hr>"; //当然,可以将多种加密算法混合使用 echo md5(sha1($my_intro)); //输出:94f25bf9214f88b1ef065a3f9b5d9874 //这种方式的双重加密也可以提高数据的安全性 로그인 후 복사 |
Urlencode 암호화:
string urlencode ( string $str )
1. 하나의 매개변수로 암호화할 문자열을 전달합니다(보통 URL을 암호화하는 데 사용됨).
2. urldecode to Encryption
3. 문자열을 반환합니다. -_를 제외한 모든 영숫자 문자는 퍼센트 기호(%)와 16진수 숫자로 대체됩니다. 더하기 기호(+)로 인코딩됩니다. ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php //urlencode()通常用于URL中明文数据的隐藏 $my_urlencode="jellybool.com?jellybool=true + 4-3%5= \& @!"; echo urlencode($my_urlencode); //输出:jellybool.com%3Fjellybool%3Dtrue+%2B+4-3%255%3D+%5C%26+%40%21 echo "<hr>"; $my_urldecode="jellybool.com%3Fjellybool%3Dtrue+%2B+4-3%255%3D+%5C%26+%40%21"; echo urldecode($my_urldecode); //输出:jellybool.com?jellybool=true + 4-3%5= \& @! //还原了$my_urlencode的输出 echo "<hr>"; $my_urldecode="http://www.baidu.com/s?word=jellybool+%E8%A7%89%E7%B4%AF%E4%B8%8D%E7%88%B1&tn=98236947_hao_pg&ie=utf-8"; echo urldecode($my_urldecode); /*输出:http://www.baidu.com/s?word=jellybool 觉累不爱&tn=98236947_hao_pg&ie=utf-8 没错,这就是在百度搜索jellybool 觉累不爱 */ /* ========================================================================= 解决第二个经典问题 ========================================================================= */ $pre_url_encode="jellybool.com?username=jellybool&password=jelly"; //在实际开发中,我们很多时候要构造这种URL,这是没有问题的 $url_decode ="jellybool.com?username=jelly&bool&password=jelly"; /*注意上面两个变量的差别:第一个的username=jellybool, 第二个为username=jelly&bool 这种情况下用$_GET()来接受是会出问题的,这是可以用下面的方法解决 */ $username="jelly&bool"; $url_decode ="jellybool.com?username=".urlencode($username)."&password=jelly"; //这是可以很好的解决问题 /* 总结一下常见的urlencode()的转换字符 ?=> %3F = => %3D % => %25 & => %26 \ => %5C + => %2B 空格 => + */
base64 인코딩 및 암호화:
string base64decode ( string $encodeddata )
1.base64_encode()는 인코딩할 데이터인 매개변수를 허용합니다(base64는 이미지를 인코딩하는 데 자주 사용되기 때문에 여기서 문자열은 언급하지 않습니다)
2.base64encode()는 양방향 암호화이며 base64decode()를 사용하여
1 2 3 4 5 6 7 8 9 10 11 12 13 | echo base64_encode($my_intro); echo "<hr>"; /*输出:SmVsbHlCb29s5piv5LiA5Liq6Lqr5p2Q5pyJ6auY5bqmLOiCqeiGgOacieWuveW 6pizog7jogozmnInljprluqYs5oCd5oOz5pyJ5rex5bqm55qE5Zu95a625YWN5qOA5Lq UQee6p+S8mOi0qOS8quWJjeerr0lU55S35bGM5Lid */ echo base64_decode('SmVsbHlCb29s5piv5LiA5Liq6Lqr5p2Q5pyJ6auY5bqmLOiCqeiGg OacieWuveW6pizog7jogozmnInljprluqYs5oCd5oOz5pyJ5rex5bqm55qE5Zu95a6 25YWN5qOA5LqUQee6p+S8mOi0qOS8quWJjeerr0lU55S35bGM5Lid'); /*输出:JellyBool是一个身材有高度,肩膀有宽度,胸肌有厚度,思想有深度的国家免检五A 级优质伪前端IT男屌丝 */ 로그인 후 복사 |
사진 예시:
1 2 3 4 5 6 7 8 9 10 11 | <?php /* 一个图片的应用例子 */ $filename="https://worktile.com/img/index/index_video.png"; $data=file_get_contents($filename); echo base64_encode($data); /*然后你查看网页源码就会得到一大串base64的字符串, 再用base64_decode()还原就可以得到图片 */ 로그인 후 복사 |