Hướng dẫn dùng rot13 translator trong PHP

ROT13 [rotate by 13 places] - Là 1 kiểu mã hóa thay thế [substitution cipher].

26 chữ cái A-Z và 26 chữ cái a-z được chia làm đôi [13], và đặt tương ứng nhau.

Các chữ cái của bản rõ [bản chưa mã hóa], sẽ được thay thế lại theo đúng thứ tự tương ứng của bảng chữ cái đã đặt ra. để tạo thành bản đã được mã hóa [bản mờ].

Minh họa cho dễ hiểu

Bảng chữ cái chia làm đôi thành 2 hàng, mỗi hàng 13 chữ cái.


A  B  C  D  E  F  G  H  I   J  K  L  M
 |   |    |   |    |   |    |   |   |   |   |   |   |
N  O  P  Q  R  S  T  U  V W X  Y  Z

Muốn viết chữ HUNGXON theo thứ tự trên ta có:

H ứng với U
U ------- H
N ------- A
G ------- T
X ------- K
O ------- B
N ------- A

Tương tự với các chữ cái in thường

a b c d e f g h i  j  k l m
|  |  |  |  |  |  | |  |  |  |  |  |
n o p q r s t u v w x y z

Để mã hóa toàn bảng chữ cái thì ghép 2 dãy với nhau:

A B C D E F G H I  J   K L M a b c d e f g h i  j  k l m
N O P Q R S T U V W X Y Z  n o p q r s t u v w x y z

Thuật toán:

Ta tạo 2 mảng:

mảng [a]: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
mảng [b]: NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm

2 mảng này có sự đối xứng với nhau theo mẫu nhé A-N, N-A, b-o, o-b ...
Ở vị trí 1 của 2 mảng là A-N thì ở vị trí khác phải là N-A thì lúc decode không bị sai :D
chuỗi cần mã hóa: HUNGxon

H ở vị trí 8 trong mảng [a], ứng với vị trí số  8 mảng [b] là U
Vậy H thay bằng U
Tương tự như vậy ta được chuỗi mã hóa: UHATkba

Để giải mã cũng so sánh vậy:

[a] -- [b]
U ----- H
H ----- U
A ----- N
T ----- G
k ----- x
b ----- o
a ----- n

Code php
Trong PHP có thể dùng hàm strstr[] để so sánh và thay thế:

function rot13[$str] {                                                        
    $a = "NOPQRSTUVWXYZnopqrstuvwxyzABCDEFGHIJKLMabcdefghijklm0123456789";
    $b = "ABCDEFGHIJKLMabcdefghijklmNOPQRSTUVWXYZnopqrstuvwxyz5678901234"
    return strtr[$str, $a, $b];
}

Mở rộng

Có thể thêm vào các ký tự [email protected]#$%^&[]* hoặc đảo sự hoán đổi các phần tử  nhưng phải
đảm bảo tính đối xứng.

Kiểu như:

[email protected]#$%^&*[]_+{}":?>

Chủ Đề