Hướng dẫn how check data is encoded or not in php? - cách kiểm tra dữ liệu được mã hóa hay không trong php?

Tôi có một chuỗi và muốn kiểm tra bằng PHP nếu đó là một base64 hợp lệ được mã hóa hay không.

Djot

2.9524 Huy hiệu vàng18 Huy hiệu bạc28 Huy hiệu đồng4 gold badges18 silver badges28 bronze badges

Đã hỏi ngày 25 tháng 11 năm 2010 lúc 14:29Nov 25, 2010 at 14:29

2

Tôi nhận ra rằng đây là một chủ đề cũ, nhưng sử dụng tham số nghiêm ngặt không nhất thiết sẽ giúp ích.

Chạy base64_decode trên một chuỗi, chẳng hạn như "Tôi không được mã hóa 64" sẽ không trả về sai.

Tuy nhiên, nếu bạn thử giải mã chuỗi bằng nghiêm ngặt và mã hóa lại nó bằng base64_encode, bạn có thể so sánh kết quả với dữ liệu gốc để xác định xem đó có phải là giá trị được mã hóa BAS64 hợp lệ không:

if [ base64_encode[base64_decode[$data, true]] === $data]{
    echo '$data is valid';
} else {
    echo '$data is NOT valid';
}

Đã trả lời ngày 29 tháng 5 năm 2012 lúc 10:11May 29, 2012 at 10:11

BottybertpottybertPottyBert

1.8221 Huy hiệu vàng13 Huy hiệu bạc14 Huy hiệu đồng1 gold badge13 silver badges14 bronze badges

14

Bạn có thể sử dụng chức năng này:

 function is_base64[$s]
{
      return [bool] preg_match['/^[a-zA-Z0-9\/\r\n+]*={0,2}$/', $s];
}

XDAZZ

156K36 Huy hiệu vàng242 Huy hiệu bạc269 Huy hiệu Đồng36 gold badges242 silver badges269 bronze badges

Đã trả lời ngày 22 tháng 6 năm 2012 lúc 10:13Jun 22, 2012 at 10:13

DennaisdennaisDennais

4665 Huy hiệu bạc14 Huy hiệu Đồng5 silver badges14 bronze badges

4

Chỉ cho các chuỗi, bạn có thể sử dụng chức năng này, kiểm tra một số thuộc tính base64 trước khi trả về đúng:

function is_base64[$s]{
    // Check if there are valid base64 characters
    if [!preg_match['/^[a-zA-Z0-9\/\r\n+]*={0,2}$/', $s]] return false;

    // Decode the string in strict mode and check the results
    $decoded = base64_decode[$s, true];
    if[false === $decoded] return false;

    // Encode the string again
    if[base64_encode[$decoded] != $s] return false;

    return true;
}

Đã trả lời ngày 22 tháng 5 năm 2014 lúc 15:11May 22, 2014 at 15:11

Merlucinmerlucinmerlucin

4334 Huy hiệu bạc8 Huy hiệu Đồng4 silver badges8 bronze badges

3

Mã này sẽ hoạt động, vì hàm giải mã trả về sai nếu chuỗi không hợp lệ:

if [base64_decode[$mystring, true]] {
    // is valid
} else {
    // not valid
}

Bạn có thể đọc thêm về chức năng base64_decode trong tài liệu.

Đã trả lời ngày 25 tháng 11 năm 2010 lúc 14:33Nov 25, 2010 at 14:33

EdodoDoedodoEdoDodo

8.1303 Huy hiệu vàng23 Huy hiệu bạc 30 Huy hiệu Đồng3 gold badges23 silver badges30 bronze badges

4

Tôi nghĩ rằng cách duy nhất để làm điều đó là thực hiện

 function is_base64[$s]
{
      return [bool] preg_match['/^[a-zA-Z0-9\/\r\n+]*={0,2}$/', $s];
}
8 với tham số
 function is_base64[$s]
{
      return [bool] preg_match['/^[a-zA-Z0-9\/\r\n+]*={0,2}$/', $s];
}
9 được đặt thành
function is_base64[$s]{
    // Check if there are valid base64 characters
    if [!preg_match['/^[a-zA-Z0-9\/\r\n+]*={0,2}$/', $s]] return false;

    // Decode the string in strict mode and check the results
    $decoded = base64_decode[$s, true];
    if[false === $decoded] return false;

    // Encode the string again
    if[base64_encode[$decoded] != $s] return false;

    return true;
}
0 và xem liệu nó có trả về
function is_base64[$s]{
    // Check if there are valid base64 characters
    if [!preg_match['/^[a-zA-Z0-9\/\r\n+]*={0,2}$/', $s]] return false;

    // Decode the string in strict mode and check the results
    $decoded = base64_decode[$s, true];
    if[false === $decoded] return false;

    // Encode the string again
    if[base64_encode[$decoded] != $s] return false;

    return true;
}
1 hay không.

2

Tôi viết phương pháp này đang hoạt động hoàn hảo cho các dự án của tôi. Khi bạn chuyển hình ảnh Base64 cho phương thức này, nếu nó hợp lệ trả về True khác, hãy trả về Sai. Hãy thử và cho tôi biết sai. Tôi sẽ chỉnh sửa và học trong tính năng này.

/**
 * @param $str
 * @return bool
 */
private function isValid64base[$str]{
    if [base64_decode[$str, true] !== false]{
        return true;
    } else {
        return false;
    }
}

Đã trả lời ngày 12 tháng 7 năm 2019 lúc 10:41Jul 12, 2019 at 10:41

NiroshanniroshanNiroshan

3213 Huy hiệu bạc4 Huy hiệu đồng3 silver badges4 bronze badges

0

Đây là một câu hỏi thực sự cũ, nhưng tôi đã tìm thấy cách tiếp cận sau đây là bằng chứng viên đạn thực tế. Nó cũng tính đến những chuỗi kỳ lạ với các ký tự không hợp lệ sẽ gây ra ngoại lệ khi xác thực.

    public static function isBase64Encoded[$str] 
{
    try
    {
        $decoded = base64_decode[$str, true];

        if [ base64_encode[$decoded] === $str ] {
            return true;
        }
        else {
            return false;
        }
    }
    catch[Exception $e]
    {
        // If exception is caught, then it is not a base64 encoded string
        return false;
    }

}

Tôi đã có ý tưởng từ trang này và điều chỉnh nó thành PHP.

Đã trả lời ngày 24 tháng 11 năm 2015 lúc 19:45Nov 24, 2015 at 19:45

Lucio Mollinedolucio MollinedoLucio Mollinedo

2.0651 Huy hiệu vàng28 Huy hiệu bạc27 Huy hiệu đồng1 gold badge28 silver badges27 bronze badges

1

Tôi đã thử như sau:

  • Base64 giải mã chuỗi với tham số nghiêm ngặt được đặt thành true.
  • Base64 mã hóa kết quả của bước trước. Nếu kết quả không giống với chuỗi gốc, thì chuỗi gốc không được mã hóa base64
  • Nếu kết quả giống như chuỗi trước, thì hãy kiểm tra xem chuỗi được giải mã có chứa các ký tự có thể in không. Tôi đã sử dụng chức năng PHP CTYPE_Print để kiểm tra các ký tự không thể in. Hàm trả về sai nếu chuỗi đầu vào chứa một hoặc nhiều ký tự không thể in.

Mã sau thực hiện các bước trên:

public function IsBase64[$data] {
    $decoded_data = base64_decode[$data, true];
    $encoded_data = base64_encode[$decoded_data];
    if [$encoded_data != $data] return false;
    else if [!ctype_print[$decoded_data]] return false;

    return true;
}

Mã trên sẽ có thể trả về kết quả bất ngờ. Ví dụ, cho chuỗi "JSON", nó sẽ trả về sai. "JSON" có thể là một chuỗi được mã hóa base64 hợp lệ vì số lượng ký tự nó có bội số của 4 và tất cả các ký tự đều nằm trong phạm vi được phép cho các chuỗi được mã hóa Base64. Có vẻ như chúng ta phải biết phạm vi các ký tự được phép của chuỗi gốc và sau đó kiểm tra xem dữ liệu được giải mã có các ký tự đó không.

Đã trả lời ngày 28 tháng 7 năm 2016 lúc 5:39Jul 28, 2016 at 5:39

Nadir Latifnadir LatifNadir Latif

3.6391 Huy hiệu vàng14 Huy hiệu bạc23 Huy hiệu đồng1 gold badge14 silver badges23 bronze badges

Được rồi, các bạn ... cuối cùng tôi đã tìm thấy một giải pháp chống đạn cho vấn đề này. Sử dụng chức năng dưới đây để kiểm tra xem chuỗi có được mã hóa base64 hay không -

    private function is_base64_encoded[$str] {

       $decoded_str = base64_decode[$str];
       $Str1 = preg_replace['/[\x00-\x1F\x7F-\xFF]/', '', $decoded_str];
       if [$Str1!=$decoded_str || $Str1 == ''] {
          return false;
       }
       return true;
    }

Đã trả lời ngày 3 tháng 2 năm 2020 lúc 12:26Feb 3, 2020 at 12:26

Bilalbilalbilal

1531 Huy hiệu bạc10 Huy hiệu đồng1 silver badge10 bronze badges

1

Nếu bạn đang thực hiện các cuộc gọi API bằng cách sử dụng JS để tải lên hình ảnh/tệp vào phần cuối thì điều này có thể giúp ích

function is_base64_string[$string]  //check base 64 encode 
{
  // Check if there is no invalid character in string
  if [!preg_match['/^[?:[data]{4}:[text|image|application]\/[a-z]*]/', $string]]{
    return false;
  }else{
    return true;
  }

}

Đã trả lời ngày 16 tháng 4 năm 2020 lúc 12:59Apr 16, 2020 at 12:59

Chủ đề cũ, nhưng tôi đã tìm thấy chức năng này và nó đang hoạt động:

function checkBase64Encoded[$encodedString] {
$length = strlen[$encodedString];

// Check every character.
for [$i = 0; $i < $length; ++$i] {
$c = $encodedString[$i];
if [
[$c < '0' || $c > '9']
&& [$c < 'a' || $c > 'z']
&& [$c < 'A' || $c > 'Z']
&& [$c != '+']
&& [$c != '/']
&& [$c != '=']
] {
// Bad character found.
return false;
}
}
// Only good characters found.
return true;
}

Đã trả lời ngày 2 tháng 5 năm 2013 lúc 6:10May 2, 2013 at 6:10

KlianklianKlian

1.4865 huy hiệu vàng21 Huy hiệu bạc29 Huy hiệu đồng5 gold badges21 silver badges29 bronze badges

Tôi mã hóa một giải pháp để xác thực hình ảnh kiểm tra sintax

 function is_base64[$s]
{
      return [bool] preg_match['/^[a-zA-Z0-9\/\r\n+]*={0,2}$/', $s];
}
0

Nhưng một cách an toàn là sử dụng sự can thiệp

 function is_base64[$s]
{
      return [bool] preg_match['/^[a-zA-Z0-9\/\r\n+]*={0,2}$/', $s];
}
1

Đã trả lời ngày 19 tháng 12 năm 2018 lúc 14:20Dec 19, 2018 at 14:20

Bạn chỉ có thể gửi chuỗi qua

function is_base64[$s]{
    // Check if there are valid base64 characters
    if [!preg_match['/^[a-zA-Z0-9\/\r\n+]*={0,2}$/', $s]] return false;

    // Decode the string in strict mode and check the results
    $decoded = base64_decode[$s, true];
    if[false === $decoded] return false;

    // Encode the string again
    if[base64_encode[$decoded] != $s] return false;

    return true;
}
2 [với $ nghiêm ngặt được đặt thành true], nó sẽ trả về sai nếu đầu vào không hợp lệ.

Bạn cũng có thể sử dụng F.I. Các biểu thức chính quy xem liệu chuỗi có chứa bất kỳ ký tự nào bên ngoài bảng chữ cái Base64 hay không và kiểm tra xem nó có chứa đúng lượng đệm ở cuối [

function is_base64[$s]{
    // Check if there are valid base64 characters
    if [!preg_match['/^[a-zA-Z0-9\/\r\n+]*={0,2}$/', $s]] return false;

    // Decode the string in strict mode and check the results
    $decoded = base64_decode[$s, true];
    if[false === $decoded] return false;

    // Encode the string again
    if[base64_encode[$decoded] != $s] return false;

    return true;
}
3 ký tự] hay không. Nhưng chỉ cần sử dụng base64_decode dễ dàng hơn nhiều và không nên có nguy cơ chuỗi dị dạng gây ra bất kỳ tác hại nào.

Đã trả lời ngày 25 tháng 11 năm 2010 lúc 14:32Nov 25, 2010 at 14:32

WimwimWim

Phù hiệu 11k40 Bạc57 Huy hiệu Đồng40 silver badges57 bronze badges

base64_decode [] sẽ trả về sai nếu dữ liệu được mã hóa base64 của bạn không hợp lệ.

Đã trả lời ngày 25 tháng 11 năm 2010 lúc 14:32Nov 25, 2010 at 14:32

WimwimScoop

Phù hiệu 11k40 Bạc57 Huy hiệu Đồng1 silver badge4 bronze badges

Tôi biết rằng tôi sử dụng một câu hỏi rất cũ, và tôi đã thử tất cả các phương pháp được đề xuất; Cuối cùng tôi cũng kết thúc với Regex này bao gồm hầu hết các trường hợp của tôi:

 function is_base64[$s]
{
      return [bool] preg_match['/^[a-zA-Z0-9\/\r\n+]*={0,2}$/', $s];
}
2

Về cơ bản, tôi kiểm tra mọi ký tự không thể in [: đồ thị :] không phải là một không gian hoặc tab [\ s] và không phải là một chữ cái Unicode [tất cả Accent Ex: èéùì, v.v.]

Tôi vẫn bị dương tính với ký tự này: £ § ° nhưng tôi không bao giờ sử dụng chúng trong một chuỗi và đối với tôi là hoàn toàn tốt để vô hiệu hóa chúng. Tôi tổng hợp kiểm tra này với chức năng được đề xuất bởi @merlucin

Vì vậy, kết quả:

 function is_base64[$s]
{
      return [bool] preg_match['/^[a-zA-Z0-9\/\r\n+]*={0,2}$/', $s];
}
3

Đã trả lời ngày 21 tháng 4 năm 2016 lúc 9:43Apr 21, 2016 at 9:43

m47730m47730m47730

1.9111 Huy hiệu vàng22 Huy hiệu bạc 30 Huy hiệu Đồng1 gold badge22 silver badges30 bronze badges

Hầu hết các câu trả lời ở đây không đáng tin cậy

Trên thực tế, không có câu trả lời đáng tin cậy, vì nhiều văn bản không được mã hóa không base64 sẽ có thể đọc được như được mã hóa cơ sở, do đó không có cách nào mặc định để biết chắc chắn.

Hơn nữa, điều đáng chú ý là base64_decode sẽ giải mã nhiều chuỗi không hợp lệ cho exmaple,

function is_base64[$s]{
    // Check if there are valid base64 characters
    if [!preg_match['/^[a-zA-Z0-9\/\r\n+]*={0,2}$/', $s]] return false;

    // Decode the string in strict mode and check the results
    $decoded = base64_decode[$s, true];
    if[false === $decoded] return false;

    // Encode the string again
    if[base64_encode[$decoded] != $s] return false;

    return true;
}
4 không hợp lệ mã hóa base64, nhưng base64_decode sẽ giải mã nó. Như
function is_base64[$s]{
    // Check if there are valid base64 characters
    if [!preg_match['/^[a-zA-Z0-9\/\r\n+]*={0,2}$/', $s]] return false;

    // Decode the string in strict mode and check the results
    $decoded = base64_decode[$s, true];
    if[false === $decoded] return false;

    // Encode the string again
    if[base64_encode[$decoded] != $s] return false;

    return true;
}
5 cụ thể. [Tôi học được điều này một cách khó khăn]

Điều đó nói rằng, phương pháp đáng tin cậy nhất của bạn là, nếu bạn kiểm soát đầu vào, để thêm một định danh vào chuỗi sau khi bạn mã hóa nó là duy nhất và không phải Base64, và bao gồm nó cùng với các kiểm tra khác. Nó không phải là chống đạn, nhưng nó chống đạn hơn nhiều so với bất kỳ giải pháp nào khác mà tôi đã thấy. Ví dụ:

 function is_base64[$s]
{
      return [bool] preg_match['/^[a-zA-Z0-9\/\r\n+]*={0,2}$/', $s];
}
4

Đã trả lời ngày 16 tháng 10 năm 2019 lúc 17:27Oct 16, 2019 at 17:27

LilharlilharlilHar

1.6133 huy hiệu vàng19 Huy hiệu bạc34 Huy hiệu đồng3 gold badges19 silver badges34 bronze badges

3

Tôi đã tìm thấy giải pháp của mình một cách tình cờ.

Đối với những người sử dụng

function is_base64[$s]{
    // Check if there are valid base64 characters
    if [!preg_match['/^[a-zA-Z0-9\/\r\n+]*={0,2}$/', $s]] return false;

    // Decode the string in strict mode and check the results
    $decoded = base64_decode[$s, true];
    if[false === $decoded] return false;

    // Encode the string again
    if[base64_encode[$decoded] != $s] return false;

    return true;
}
6 để kiểm tra có thể thấy rằng một thời gian, nó không thể kiểm tra chuỗi như kiểm tra, 5555.test, 5555.

Nếu chuỗi 64 cơ sở không hợp lệ là

 function is_base64[$s]
{
      return [bool] preg_match['/^[a-zA-Z0-9\/\r\n+]*={0,2}$/', $s];
}
8 mà không trả lại
function is_base64[$s]{
    // Check if there are valid base64 characters
    if [!preg_match['/^[a-zA-Z0-9\/\r\n+]*={0,2}$/', $s]] return false;

    // Decode the string in strict mode and check the results
    $decoded = base64_decode[$s, true];
    if[false === $decoded] return false;

    // Encode the string again
    if[base64_encode[$decoded] != $s] return false;

    return true;
}
1, thì nó sẽ chết khi bạn cố gắng
function is_base64[$s]{
    // Check if there are valid base64 characters
    if [!preg_match['/^[a-zA-Z0-9\/\r\n+]*={0,2}$/', $s]] return false;

    // Decode the string in strict mode and check the results
    $decoded = base64_decode[$s, true];
    if[false === $decoded] return false;

    // Encode the string again
    if[base64_encode[$decoded] != $s] return false;

    return true;
}
9. Điều này bởi vì chuỗi được giải mã không hợp lệ. Vì vậy, tôi sử dụng phương pháp này để kiểm tra chuỗi mã hóa cơ sở hợp lệ 64.
So, I use this method to check for valid base 64 encoded string.

Đây là mã.

 function is_base64[$s]
{
      return [bool] preg_match['/^[a-zA-Z0-9\/\r\n+]*={0,2}$/', $s];
}
5

Và đây là mã kiểm tra.

 function is_base64[$s]
{
      return [bool] preg_match['/^[a-zA-Z0-9\/\r\n+]*={0,2}$/', $s];
}
6

Kết quả kiểm tra:

555 là cơ sở không hợp lệ 64 NTU1 là cơ sở hợp lệ 64
NTU1 is valid base 64

5555 là cơ sở không hợp lệ 64 ntu1nq == là cơ sở hợp lệ 64
NTU1NQ== is valid base 64

xin chào là cơ sở không hợp lệ 64 agvsbg8 = là cơ sở hợp lệ 64
aGVsbG8= is valid base 64

สวัสดี là cơ sở không hợp lệ 64 4liq4lin4Lix4LIQ4LIU4LI1 là cơ sở hợp lệ 64
4Liq4Lin4Lix4Liq4LiU4Li1 is valid base 64

Kiểm tra là cơ sở không hợp lệ 64 dgvzda == là cơ sở hợp lệ 64
dGVzdA== is valid base 64

Đã trả lời ngày 29 tháng 10 năm 2021 lúc 19:41Oct 29, 2021 at 19:41

Veeveevee

4.2914 Huy hiệu vàng42 Huy hiệu bạc78 Huy hiệu đồng4 gold badges42 silver badges78 bronze badges

Để xác thực mà không có lỗi mà ai đó gửi based64 bị cắt hoặc nó không phải là hình ảnh, hãy sử dụng chức năng này để kiểm tra base64 và sau đó nếu nó thực sự là một hình ảnh

 function is_base64[$s]
{
      return [bool] preg_match['/^[a-zA-Z0-9\/\r\n+]*={0,2}$/', $s];
}
7

Đã trả lời ngày 2 tháng 8 lúc 18:48Aug 2 at 18:48

Tôi đang sử dụng phương pháp này. Nó hy vọng 2 ký tự cuối cùng sẽ được ==

if [base64_decode[$mystring, true]] {
    // is valid
} else {
    // not valid
}
0

CẬP NHẬT: Cuối cùng tôi đã thực hiện một kiểm tra khác nếu cái trên thất bại trên base64_decode [$ buff, true]

Đã trả lời ngày 14 tháng 1 năm 2014 lúc 3:52Jan 14, 2014 at 3:52

3

Nếu dữ liệu không hợp lệ cơ sở64 thì hàm base64_decode [$ String, true] sẽ trả về sai.

Đã trả lời ngày 25 tháng 11 năm 2010 lúc 14:32Nov 25, 2010 at 14:32

Citrincitrincitrin

6855 Huy hiệu bạc9 Huy hiệu Đồng5 silver badges9 bronze badges

1

Làm thế nào kiểm tra dữ liệu là base64 hoặc không trong PHP?

"; $ value_2 = mảng []; echo" nnbase64: n "; foreach [str_split [base64_decode ['không mã hóa base64 ] = ord [$ char];} echo "max value_2 =". max [$ value_2].

Base64 có được mã hóa PHP không?

Hàm base64_encode [] là một hàm sẵn có trong PHP được sử dụng để mã hóa dữ liệu với MIME Base64.MIME [Phần mở rộng thư Internet đa năng] Base64 được sử dụng để mã hóa chuỗi trong Base64.Dữ liệu base64_encoded mất thêm 33% không gian sau đó là dữ liệu gốc.. MIME [Multipurpose Internet Mail Extensions] base64 is used to encode the string in base64. The base64_encoded data takes 33% more space then original data.

Mb_detect_encoding là gì?

mb_detect_encoding [] phát hiện mã hóa ký tự trong chuỗi str.Nó trả về mã hóa ký tự phát hiện.Danh sách mã hóa là danh sách mã hóa ký tự.Thứ tự mã hóa có thể được chỉ định bởi chuỗi danh sách phân tách bằng dấu phẩy.Nếu mã hóa_list bị bỏ qua, hãy phát hiện_order được sử dụng.detects character encoding in string str. It returns detected character encoding. encoding-list is list of character encoding. Encoding order may be specified by array or comma separated list string. If encoding_list is omitted, detect_order is used.

Làm thế nào giải mã cơ sở64 trong PHP?

Base64_Decode [] là một hàm sẵn có trong PHP được sử dụng để giải mã dữ liệu được mã hóa trong MIME Base64.Tham số: Hàm này chấp nhận hai tham số như đã đề cập ở trên và được mô tả dưới đây: $ Data: Đó là tham số bắt buộc chứa chuỗi được mã hóa.$ Strict: Đó là một tham số tùy chọn.base64_decode[] is an inbuilt function in PHP which is used to Decodes data which is encoded in MIME base64. Parameters: This function accepts two parameter as mentioned above and described below: $data: It is mandatory parameter which contains the encoded string. $strict: It is an optional parameter.

Bài Viết Liên Quan

Chủ Đề