Sử dụng OAuth và sử dụng chức năng sau để mã hóa khóa bằng chuỗi mà chúng tôi gọi là "foo" (thực ra là mã thông báo OAuth)
mã hóa chức năng công cộng( $text )
{
// thêm cuối dấu phân cách văn bản
$data = mcrypt_encrypt( MCRYPT_RIJNDAEL_128, $this->key, $text, MCRYPT_MODE_ECB, $this->iv );
trả về base64_encode( $data );
}
Khi tôi giải mã nó bằng hàm nghịch đảo, tôi kết thúc bằng:
Chức năng:
giải mã chức năng công cộng( $text )
{
$text = base64_decode( $text );
trả về mcrypt_decrypt( MCRYPT_RIJNDAEL_128, $this->key, $text, MCRYPT_MODE_ECB, $this->iv );
}
kết quả:
foo%00%00%00%00%00%00%00%00%00%00%00%00%00%00
biên tập:
Nhìn kỹ hơn một chút, tôi nhận ra nó thực sự được mã hóa URL %00, điều đó có nghĩa là chuỗi của tôi bằng cách nào đó được đệm bằng các ký tự null? Vì vậy, tôi hiện đang sử dụng Trim() để loại bỏ chúng, nhưng tôi muốn hiểu lý do tại sao điều này lại xảy ra.
Rijndael là một chặn mật mã , có nghĩa là nó hoạt động trên một khối dữ liệu có độ dài cụ thể (trong trường hợp này là 128 bit). Điều này có nghĩa là nếu độ dài của văn bản đầu vào không phải là bội số của kích thước khối thì nó phải được đệm cho vừa. Trong trường hợp này, phần đệm bằng 0; có thể có nhiều phần khác; sơ đồ đệmcó thể được sử dụng, nhưng bạn phải áp dụng chúng theo cách thủ công nếu bạn muốn chúng hoạt động với mcrypt của PHP.
Tôi là một lập trình viên xuất sắc, rất giỏi!