用dw編輯器自帶的加密工具,或者自己寫js加密解密腳本
B. base64編碼以及url safe base64是怎麼工作的
ASCII碼一共規定了128個字元的編碼,這128個符號,范圍在[0,127]之間.
其中,[0,31],及127, 33個屬於不可列印的控制字元.
在電子郵件傳輸信息時,有些郵件網關會把[0,31]這些控制字元給悄悄清除.
還有的早期程序,收到[128,255]之間的國際字元時,甚至會發生錯誤.
如何在不同郵件網關之間安全的傳輸控制字元,國際字元,甚至二進制文件?
於是作為MIME多媒體電子郵件標準的一部分—base64被開發出來.
1.a 什麼是url_safe base64編碼?
在上面的base64傳統編碼中會出現+, /兩個會被url直接轉義的符號,因此如果希望通過url傳輸這些編碼字元串,我們
需要先做傳統base64編碼,隨後將+和/分別替換為- _兩個字元,在接收端則做相反的動作解碼
http://www.ietf.org/rfc/rfc4648.txt
復制代碼
/**
* URL base64解碼
* '-' -> '+'
* '_' -> '/'
* 字元串長度%4的余數,補'='
* @param unknown $string
*/
function urlsafe_b64decode($string) {
$data = str_replace(array('-','_'),array('+','/'),$string);
$mod4 = strlen($data) % 4;
if ($mod4) {
$data .= substr('====', $mod4);
}
return base64_decode($data);
}
/**
* URL base64編碼
* '+' -> '-'
* '/' -> '_'
* '=' -> ''
* @param unknown $string
*/
function urlsafe_b64encode($string) {
$data = base64_encode($string);
$data = str_replace(array('+','/','='),array('-','_',''),$data);
return $data;
}
復制代碼
2: 一句話說完base64怎麼工作的?
把N位元組的內容對應的8*N位, 每6位砍成1段,得到 (8*N)/6 個單元,
每個單元的值,都在[0,63]之間,再把其值對應1個ascii字元,拼接起來,OK!
base64_encode(』PHP』) ==> 『UEhQ』, 編碼過程如下:
3: 如果每6位砍成1段,但不能整除,餘下2個位或4位怎麼辦?
用」0″來補至6位, 並再次轉化為」base64字元表」中的某個字元.
然後,再用」=」字元當做6個位,繼續填充,直至總位數能被8帶整除.
字元串 二進制序列(紅字為填充位) 編碼結果
PHP 010100 000100 100001 010000 UEhQ
it 011010 010111 0100
00 xxxxxx
aXQ=
bool 011000 100110 111101 101111 011011 00
0000 xxxxxx xxxxxx
Ym9vbA==
4:base64表示圖片
通過上面的演示,可以看出,base64也可以編碼二進制文件,如郵件中的圖片和附件.
編碼後,我們可以在網頁或郵件的源碼里,直接體現此圖片,
而不必把圖片放在伺服器上,引用其鏈接.
用例:base64(』abc.png』) ==> 『encoded-result』;
則在網頁中, <img src=」data:image/png;base64,encoded-result」 />
看到下面這個5角星了嗎? 右鍵看源碼,就會發現圖片是一串字元串
5: base64編碼後位元組的變化
很容易推算出, 編碼後,每6個位變成8個位.
因此,編碼後位元組約比編碼前多33%.
6: base64串結尾的」=」可以去掉嗎?
從上面的編碼規則可以反推出, 在base64解碼的過程中, 要清除掉結尾處的等號,
然後再反查」base64索引與字母對照表」,轉換成原始的位元組序列.
那麼,去掉尾部的等號,並沒有丟失原始信息,但結構變得不規范.
解碼前是否判斷完整性,這取決於你的應用程序.
實測PHP中的base64_decode函數,並不檢測尾部的等號是否完整.
C. 求URL-SAFE-BASE64加密解密的java代碼
base64 編碼後,有幾個是不能url safe。所以自己替換一下。收到後,再替換回來
D. 求大神指點base64_encode php
你的PHP的源碼a.php必須用UTF-8字元編碼。目測大概是用的GB2312。所以不相同。
改用Utf-8後
echobase64_encode("王先生");
得到
546L5YWI55Sf
E. js中非標准Base64解碼,求解碼源碼,謝謝!
base64編碼:
string base64_encode(string data)
data:要進行base64編碼的數據。該函數的返回結果為字元串類型
還原:
string base64_decode(string encoded_data)
encoded_data 指要進行base64解碼的字元串
F. html img 有了id後無法正常顯示src 分析源碼發現base64編碼 求大神!!
這是怎麼來分解的呢?
這些我還是有點看不懂
G. base64解密後的數組怎麼變短了
commons-codec 挺好用的
H. 跪求一份e4a 中文編程Base64加密和jie密源碼
代碼是我自己寫的!水平有限,反正功能實現了。原來是迅雷鏈接轉換的函數,已經修改為Base64加密了,可以直接用,解密的沒有。。。需要的話參照易語言的修改吧。。。以下為函數:
函數 迅雷編碼(原文本 為 文本型) 為 文本型
變數 原文 為 位元組型()
變數 余數 為 整數型
變數 三位元組數據 為 位元組型(3)
變數 碼表 為 位元組型(64)
變數 len_x 為 整數型
變數 len_y 為 整數型
變數 i 為 整數型
變數 k 為 整數型
變數 結果 為 位元組型()
變數 原文擴充 為 位元組型(1)
變數 結果擴充 為 位元組型(1)
'原文本 = "AA" & 原文本 & "ZZ"
原文 = 文本到位元組(原文本 ,"GBK")
原文擴充(0) = 0
結果擴充(0) = 61
len_x = 取位元組集長度 (原文)
余數 = len_x % 3
如果 (余數 = 1) 則
原文 = 合並位元組集(原文 , 原文擴充)
原文 = 合並位元組集(原文 , 原文擴充)
len_x = len_x + 2
否則如果 (余數 = 2) 則
原文 = 合並位元組集(原文 , 原文擴充)
len_x = len_x + 1
結束 如果
len_y = len_x * 4 / 3
i = 1
碼表(0) = 65
碼表(1) = 66
碼表(2) = 67
碼表(3) = 68
碼表(4) = 69
碼表(5) = 70
碼表(6) = 71
碼表(7) = 72
碼表(8) = 73
碼表(9) = 74
碼表(10) = 75
碼表(11) = 76
碼表(12) = 77
碼表(13) = 78
碼表(14) = 79
碼表(15) = 80
碼表(16) = 81
碼表(17) = 82
碼表(18) = 83
碼表(19) = 84
碼表(20) = 85
碼表(21) = 86
碼表(22) = 87
碼表(23) = 88
碼表(24) = 89
碼表(25) = 90
碼表(26) = 97
碼表(27) = 98
碼表(28) = 99
碼表(29) = 100
碼表(30) = 101
碼表(31) = 102
碼表(32) = 103
碼表(33) = 104
碼表(34) = 105
碼表(35) = 106
碼表(36) = 107
碼表(37) = 108
碼表(38) = 109
碼表(39) = 110
碼表(40) = 111
碼表(41) = 112
碼表(42) = 113
碼表(43) = 114
碼表(44) = 115
碼表(45) = 116
碼表(46) = 117
碼表(47) = 118
碼表(48) = 119
碼表(49) = 120
碼表(50) = 121
碼表(51) = 122
碼表(52) = 48
碼表(53) = 49
碼表(54) = 50
碼表(55) = 51
碼表(56) = 52
碼表(57) = 53
碼表(58) = 54
碼表(59) = 55
碼表(60) = 56
碼表(61) = 57
碼表(62) = 43
碼表(63) = 47
三位元組數據 (0) = 1
三位元組數據 (1) = 2
三位元組數據 (2) = 3
k = 0
判斷循環首 k < len_y
結果 = 合並位元組集(結果 , 結果擴充)
k = k + 1
判斷循環尾
變數循環首 k = 1 至 len_x 步進 3
三位元組數據 (1 - 1) = 原文 (k - 1)
三位元組數據 (2 - 1) = 原文 (k + 1 - 1)
三位元組數據 (3 - 1) = 原文 (k + 2 - 1)
結果 (i - 1) = 碼表 (位右移 (三位元組數據 (1 - 1), 2) + 1 - 1)
結果 (i + 1 - 1) = 碼表 (位左移 (位與 (三位元組數據 (1 - 1), 3), 4) + 位右移 (三位元組數據 (2 - 1), 4) + 1 - 1)
結果 (i + 2 - 1) = 碼表 (位左移 (位與 (三位元組數據 (2 - 1), 15), 2) + 位右移 (三位元組數據 (3 - 1), 6) + 1 - 1)
結果 (i + 3 - 1) = 碼表 (位與 (三位元組數據 (3 - 1), 63) + 1 - 1)
i = i + 4
變數循環尾
如果 (余數 = 1) 則
結果 (len_y - 1) = 61
結果 (len_y - 2) = 61
否則如果 (余數 = 2) 則
結果 (len_y - 1) = 61
結束 如果
'迅雷編碼 = "
I. 求java加密源代碼(MD5,base64)
加密什麼加密字元串嗎,我這里有md5的演算法
public final static String MD5(String pwd) {
char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'A', 'B', 'C', 'D', 'E', 'F' };
try {
byte[] strTemp = pwd.getBytes();
MessageDigest mdTemp = MessageDigest.getInstance("MD5");
mdTemp.update(strTemp);
byte[] md = mdTemp.digest();
int j = md.length;
char str[] = new char[j * 2];
int k = 0;
for (int i = 0; i < j; i++) {
byte byte0 = md[i];
str[k++] = hexDigits[byte0 >>> 4 & 0xf];
str[k++] = hexDigits[byte0 & 0xf];
}
return new String(str);
} catch (Exception e) {
return null;
}
}
J. Java Base64加碼解碼 Base64.encodeBase64 ( ) 和 new BASE64Enccoder( ).encode( )區別
Base64.encodeBase64 ( ) 可以處理換行符,
new BASE64Enccoder( ).encode( )需要單獨處理換行符。
在linux/windows下,推薦使用第一種,不用自己單獨處理換行。