soQoUYXcOboCRCQuxa4tog%3D%3D
上面的是什么加密方式啊
uj5u.com熱心網友回復:
%3D 就是西文等號“=”的編碼,這樣,這個“字串”就是:soQoUYXcOboCRCQuxa4tog==
共24位元組,按長度、字符特征,可判斷為 BASE64編碼。
uj5u.com熱心網友回復:
可是按BASE64編碼 解碼是亂碼怎么回事 (Q?D$.?-uj5u.com熱心網友回復:
難道“別人的資料”一定是一串文本嗎!
BASE64是可以對任意資料進行編碼的。
uj5u.com熱心網友回復:
這個是網路鏈接的部分內容吧僅僅因為長度判斷這種引數傳遞的東西
真不一定是單純的某種編碼
uj5u.com熱心網友回復:
電腦記憶體或檔案內容或傳輸內容只是一個一維二進制位元組陣列及其對應的二進制地址;人腦才將電腦記憶體或檔案內容或傳輸內容中的這個一維二進制位元組陣列及其對應的二進制地址的某些部分看成是整數、有符號數/無符號數、浮點數、復數、英文字母、阿拉伯數字、中文/韓文/法文……字符/字串、匯編指令、函式、函式引數、堆、堆疊、陣列、指標、陣列指標、指標陣列、陣列的陣列、指標的指標、二維陣列、字符點陣、字符筆畫的坐標、黑白二值圖片、灰度圖片、彩色圖片、錄音、視頻、指紋資訊、身份證資訊……
推薦使用WinHex軟體查看硬碟或檔案或記憶體中的原始位元組內容。
對電腦而言沒有亂碼,只有二進制位元組;對人腦才有亂碼。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A
uj5u.com熱心網友回復:
BASE64 不是一種加密演算法。它僅僅是一種傳輸中資料格式轉換協議。在互聯網的某些局域網段,僅支持編碼小于 128 的位元組,即每一個位元組的最高位均為 0。這就帶來一個問題:二進制資料通過這些網段傳輸時,會丟失資訊。
BASE64 的方法是,通過以 4 位元組表示原文 3 位元組的方式,縮小實際傳輸位元組值的大小。即,將 3 位元組的 24 位元,重新拆分組合成各有 6 位元實際值的 4 位元組,均高位補零。
然后,用 26 個字母的大小寫,以及數字 0 -9 和 +、/ 兩個符號,共 64 個字符,來代替值為 0 至 63 的位元組。也就是說,實際傳輸的是這些可列印字符。本質上,這是一次編碼代換。用這 64 個字符就是 BASE64 名稱的由來。
這些字符 ASCII 均小于 128,同時不包含會引起歧義的控制字符。這就解決了特殊網段的傳輸問題。
在 BASE64 字串的尾端,可以有 1 或 2 個 = 等號,表示轉換時填充了幾個空位元組(如果原文位元組長度不是 3 的倍數)。
當接收端接收報文后,進行逆轉換(先將字符轉換成位元值,再進行位元組重組),就得到原來的資料。
uj5u.com熱心網友回復:
僅供參考:#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define BASE64_VALUE_SZ 256
int base64_value[BASE64_VALUE_SZ];
const unsigned char alphabet[65] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
class Base64Utility {
public:
Base64Utility();
int base64_encode(char *src, int srclen, char *dst, int tail);
int base64_decode(char *src, int srclen, char *dst);
private:
void base_64_init(void);
};
Base64Utility::Base64Utility() {
base_64_init();
}
void Base64Utility::base_64_init(void) {
int i;
for (i = 0; i < BASE64_VALUE_SZ; i++) base64_value[i] = -1;
for (i = 0; i < 64; i++) base64_value[(int) alphabet[i]] = i;
base64_value['='] = 0;
}
int Base64Utility::base64_encode(char *src, int srclen, char *dst, int tail) {
int bits, char_count, len;
char *o_char, *lim, *o_lim;
unsigned char c;
if ( !src || !dst) return 0;
len = srclen;
lim = src + len;
o_char = dst;
o_lim = dst + (len*4)/3 + 1;
char_count = 0;
bits = 0;
while ( (src < lim) && (o_char < o_lim)) {
c = *(src++);
bits += c;
char_count++;
if (char_count == 3) {
*(o_char++) = alphabet[bits >> 18];
*(o_char++) = alphabet[(bits >> 12) & 0x3f];
*(o_char++) = alphabet[(bits >> 6) & 0x3f];
*(o_char++) = alphabet[bits & 0x3f];
bits = 0;
char_count = 0;
} else {
bits <<= 8;
}
}
if (char_count != 0) {
bits <<= 16 - (8 * char_count);
*(o_char++) = alphabet[bits >> 18];
*(o_char++) = alphabet[(bits >> 12) & 0x3f];
if (char_count == 1) {
if (tail) {
*(o_char++) = '=';
*(o_char++) = '=';
}
} else {
*(o_char++) = alphabet[(bits >> 6) & 0x3f];
if (tail) {
*(o_char++) = '=';
}
}
}
*(o_char) = 0;
return strlen(dst);
}
int Base64Utility::base64_decode(char *src, int srclen, char *dst) {
int j;
unsigned int k;
int c, base_result_sz;
long val;
if (!src || !dst) return 0;
base_result_sz = srclen;
val = c = 0;
for (j = 0; *src; src++) {
k = (int) *src % BASE64_VALUE_SZ;
if (base64_value[k] < 0) continue;
val <<= 6;
val += base64_value[k];
if (++c < 4) continue;
dst[j++] = (char) (val >> 16);
dst[j++] = (val >> 8) & 0xff;
dst[j++] = val & 0xff;
val = c = 0;
}
switch (c) {
case 2://xxxxxx xx0000
dst[j++] = (val >> 4) & 0xff;
break;
case 3://XXXXXX XXxxxx xxxx00
dst[j++] = (char) (val >> 10);
dst[j++] = (val >> 2) & 0xff;
break;
}
return j;
}
Base64Utility b64u;
#define MAXLENS 1024768
#define MAXLEND 1366360
char bufd[MAXLEND];
char bufs[MAXLENS];
FILE *fs,*fd;
int fsize;
int main(int argc,char *argv[]) {
if (argc<4) {
USE:
printf("%s <-e|-E|-d> srcfile desfile\n",argv[0]);
return 1;
}
if (stricmp(argv[1],"-e") && stricmp(argv[1],"-d")) goto USE;
if (0==stricmp(argv[1],"-e")) {
fs=fopen(argv[2],"rb");
if (NULL==fs) {
printf("Can not open file %s!\n",argv[2]);
return 2;
}
fsize=fread(bufs,1,MAXLENS,fs);
if (fsize<=0) {
fclose(fs);
printf("Can not read file %s!\n",argv[2]);
return 3;
}
if (MAXLENS==fsize) printf("Warning: Up to %d bytes.\n",MAXLENS);
fclose(fs);
b64u.base64_encode(bufs,fsize,bufd,('E'==argv[2][1]));
fd=fopen(argv[3],"w");
if (NULL==fd) {
printf("Can not create file %s!\n",argv[3]);
return 4;
}
fprintf(fd,"%s",bufd);
fclose(fd);
} else {//0==stricmp(argv[1],"-d")
fd=fopen(argv[2],"rb");
if (NULL==fd) {
printf("Can not open file %s!\n",argv[2]);
return 2;
}
fsize=fread(bufd,1,MAXLEND,fd);
if (fsize<=0) {
fclose(fd);
printf("Can not read file %s!\n",argv[2]);
return 3;
}
if (MAXLEND==fsize) printf("Warning: Up to %d bytes.\n",MAXLEND);
fclose(fd);
fsize=b64u.base64_decode(bufd,fsize,bufs);
fs=fopen(argv[3],"wb");
if (NULL==fs) {
printf("Can not create file %s!\n",argv[3]);
return 4;
}
if (fsize!=(int)fwrite(bufs,1,fsize,fs)) {
printf("Write %s error!\n",argv[3]);
fclose(fs);
return 5;
}
fclose(fs);
}
return 0;
}
uj5u.com熱心網友回復:
是不是你這個密碼不完整啊你是從哪里得到這個的呢。末尾==我也覺得像是base64加密的
uj5u.com熱心網友回復:
看一下五樓。轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/63956.html
標籤:VB基礎類
上一篇:wise打包MSDE問題
下一篇:VB與串口通訊
