1. 程式人生 > >php base64編碼 加解密 手動實現

php base64編碼 加解密 手動實現

GB_2312 字符集是目前最常用的漢字編碼標準。在這個標準中,每個漢字用2個位元組來表示,每個位元組的ascii碼為 161-254 (16 進位制A1 - FE),第一個位元組 對應於 區碼的1-94 區,第二個位元組 對應於位碼的1-94 位。

漢字的unicode 編碼範圍為 \u4e00 ~ \u94a5

UTF-8 字符集中一個漢字站三個位元組:參考連結
<?php
header("charset=utf-8");
$str = "Mn一丁丂七丄丅丆萬丈丌啊";
echo $base = base64_encode($str);
echo "<br/>";
echo base64_decode($base);
echo "<hr/>";
$code = encode64($str);
echo $code,"<br/>";
echo $decode = decode64($code);

function encode64($str){
    $base64 = implode("",range('A','Z')).implode("",range('a','z')).implode("",range('0','9'))."+/";
    if($str=="") return false;
    $binStr = StrToBin($str);
    $more = 0;
    $encodeStr = "";
    for($i=0;$i<strlen($binStr);$i+=6){
        if($more == 4) $more = 0;
        $more++;
        $bin6 = substr($binStr,$i,6);
        if(strlen($bin6)<6){
            $bin6 .= str_repeat("0",6 - strlen($bin6));
        }
        $index = base_convert($bin6, 2, 10);
        $encodeStr .= $base64{$index};
    }
    return $encodeStr.str_repeat("=",4 - $more);
}
function decode64($str){
    $base64 = implode("",range('A','Z')).implode("",range('a','z')).implode("",range('0','9'))."+/";
    if($str=="") return false;
    $more = substr_count($str, "=");
    $str = substr($str,0,strlen($str)-$more);
    $arr = str_split($str);
    $binStr = "";
    //base64 到 6個二進位制還原
    foreach($arr as $val){
        $index = strpos($base64,$val);
        $bin6 = base_convert($index, 10, 2);
        $binStr .= str_repeat("0",6-strlen($bin6)).$bin6;
    }
    //6 => 8 二進位制還原
    $binStr = substr($binStr,0,strlen($binStr)-$more*2);
    return BinToStr($binStr);
}

function StrToBin($str){
    $arr = preg_split("/(?<!^)(?!$)/u",$str);
    $binStr = "";
    foreach($arr as $v){
        $hex = unpack("H*",$v);
        $bin8 = base_convert($hex[1], 16, 2);
        $mod = 8 - fmod(strlen($bin8),8);
        if($mod > 0 && $mod < 8)
            $bin8 = str_repeat("0",$mod).$bin8;

        $binStr .= $bin8;
    }
    return $binStr;
}

function BinToStr($str){
    $binArr = array();$index=0;$index2=0;
    for($i=0;$i<strlen($str);$i+=8){
        $bin8 = substr($str,$i,8);
        if($bin8{0}==0){
            $bin8 = preg_replace("/^0+/", " ", $bin8);
            $binArr[$index] = $bin8;
            $index++;
        }else{
            if($index2==0){
                $binArr[$index] = " ".$bin8;
                $index2++;
            }else{
                $binArr[$index] .= $bin8;
                $index2++;
                if($index2==3){
                    $index2=0;
                    $index++;
                }
            }
        }
    }
    $deArr = array();
    foreach($binArr as $k=>$v){
        $hex = base_convert($v, 2, 16);
        $v = pack("H".strlen($hex),$hex);
        $deArr[$k] = $v;
    }
    return join("",$deArr);
}

相關推薦

php base64編碼 解密 手動實現

GB_2312 字符集是目前最常用的漢字編碼標準。在這個標準中,每個漢字用2個位元組來表示,每個位元組的ascii碼為 161-254 (16 進位制A1 - FE),第一個位元組 對應於 區碼的1-94 區,第二個位元組 對應於位碼的1-94 位。漢字的unicode 編碼

關於base64編碼的原理及實現

一個 replace 編碼範圍 func nco 都是 style bit 如果 我們的圖片大部分都是可以轉換成base64編碼的data:image。 這個在將canvas保存為img的時候尤其有用。雖然除ie外,大部分現代瀏覽器都已經支持原生的基於base64的enco

HmacSHA256簽名Base64編碼URL編碼

invalid algo () public 密鑰 body Go div nature /** *先使用HmacSHA256簽名,再使用Base64編碼,最後進行URL 編碼 *signatureReqStr : 待加密data * secretKey : 密鑰 */pu

PHP 基礎篇 - PHP 中 DES 解密詳解

tor 數據加密 解密 ans eat mark encrypted hex 基礎 一、簡介 DES 是對稱性加密裏面常見一種,全稱為 Data Encryption Standard,即數據加密標準,是一種使用密鑰加密的塊算法。密鑰長度是64位(bit),超過位數密鑰被忽

PHP中常用解密方式

PHP中使用OpenSSL生成RSA公鑰私鑰及進行加密解密示例(非對稱加密) php服務端與客戶端互動、提供開放api時,通常需要對敏感的部分api資料傳輸進行資料加密,這時候rsa非對稱加密就能派上用處了,下面通過一個例子來說明如何用php來實現資料的加密解密 一、公鑰加密 假設一下,我找了兩個數字,

BASE64編碼原理分析指令碼實現及逆向案例

BASE64編碼原理分析指令碼實現及逆向案例 0x01 簡單介紹 資料傳送時並不支援所有的字元,很多時候只支援可見字元的傳送。但是資料傳送不可能只傳送可見字元為解決這個問題就誕生了base64編碼。base64編碼將所有待編碼字元轉換成64個可見字元表中的字元。 0x02 編碼原理 被

python Crypto AES-256-ECB 與PHP之間完成解密

openss 固定 base aes ecb 世界 and brush mode AES算法描述:  首先AES是一種對稱加密算法。 算法特點:   1、AES的區塊長度固定為128 比特(16字節)。    # 因此在加密前需要對待加密字符串進行填充,長度填充至128bi

C語言AES解密程式碼實現

#include<stdio.h> #include<string.h> #include<string> #include<iostream> #include<unistd.h> #include<algorithm> us

Druid連線池自定義資料庫密碼解密實現

Druid的功能 1、替換DBCP和C3P0。Druid提供了一個高效、功能強大、可擴充套件性好的資料庫連線池。 2、可以監控資料庫訪問效能,Druid內建提供了一個功能強大的StatFilter外掛,能夠詳細統計SQL的執行效能,這對於線上分析資料庫訪問效

Base64編碼解碼C語言實現

static const char *codes = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; static const unsigned char map[256] = {

關於java 與PHP aes-128 解密的問題

寫個這個問題呢,是自己專案中遇到了!最後java 的夥伴陪同我一起解決了,所以就記錄下啦!不做頁面優化了! java使用aes-128 加密與php 使用aes-128加密是不一樣的,首先,java加

java中RSA解密實現

原文:https://blog.csdn.net/draven1122/article/details/55212195關於加密資料長度和解密資料長度大家可以看一下我前一篇文章內的介紹:publicstaticvoid main(String[] args) throws E

C#/JAVA/PHP 互通DES解密演算法(ECB模式支援8位)

import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingE

PHP實現將圖片base64編碼&&上傳資料庫&&顯示

  view檢視上傳程式碼->一個form表單即可: <form action="{{url('file64')}}" method="post" enctype="multipart/form-data"> {{csrf_field()}} &l

資料解密基礎知識介紹,及Java實現Base64加密

加密流程涉及的一些關鍵詞: 明文:準備加密的資訊 加密:把明文處理為密文的過程 加密演算法:具體實現明文轉為密文的演算法 加密金鑰:通過加密演算法進行加密操作需要的金鑰 密文:被加密的明文 解密:將密文轉為明文的過程 解密演算法:具體實現密文轉為明文的演算法 解

利用PHP將圖片轉換成base64編碼實現方法

先來說一下為什麼我們要對圖片base64編碼 base64是當前網路上最為常見的傳輸8Bit位元組程式碼的編碼方式其中之一。base64主要不是加密,它主要的用途是把某些二進位制數轉成普通字元用於網路傳輸。由於這些二進位制字元在傳輸協議中屬於控制字元,不能直接傳送,所以需要轉換一下。雖然圖片可能直接傳輸,但

PHP使用openssl實現RSA解密

業務場景就不用說了,有很多地方都用的到。在此寫出一個例子,一來供自己查閱,二來分享一下。。。 生成公鑰、私鑰的方法網上有很多,不過有個簡單的方法: 引用博友寫好的,點選連結檢視:linux下如何生成公鑰和私鑰 獲取到公鑰、私鑰之後,來看加密解密~~~~~~ 在此提一下跨語言

nodejs aes解密128演算法,base64編碼

function encryption(data) { var iv = ""; var clearEncoding = 'utf8'; var cipherEncoding = 'base64'; var cipherChun

【JAVA】常用解密演算法總結及JAVA實現BASE64,MD5,SHA,DES,3DES,AES,RSA】

BASE64 這其實是一種編解碼方法,但是隻要我們能夠將原文變成肉眼不可識別的內容,其實就是一種加密的方法。 BASE64 的編碼都是按字串長度,以每 3 個 8 bit 的字元為一組,然後針對每組,首先獲取每個字元的 ASCII 編碼,然後將 ASCII 編碼轉換成 8

Qt以Base64加密作為基礎實現3種解密方式(包含中文處理)

目錄 效果圖 加密演算法 本文提供三種方式來加密解密,都是用Qt本身提供的類,沒用外接庫。 普通base64加密解密 Qt已經有了最基本的toBase64加密演算法,同時提供fromBase64解密演算法。 加密