base64中文加密解密
Ⅰ php 中文字符串用base64加密后解密变成了sjis-win编码格式,无法转成utf8的,求解
解密前加. header("Content-type:text/html;charset=utf-8");
Ⅱ base64编码加密解密程序,输出有乱码,为什么
这个我也碰到过,要用memset(m_strUserName,0,sizeof(m_strUserName))来初始化m_strUserName数组.
Ⅲ base64 加密后可以还原回去,这种加密不就没有安全性可言了
base64是一种编码方式,编码算法完全公开,所以逆向解码即可
而不是一种加密算法
Ⅳ 中文字符串转换(加密),base64转换后太长了
看看这个就知道为什么base64可以把二进制编码成字母了:
http://en.wikipedia.org/wiki/Base64
还有一个uuencode, 但是通常是对文件用的,编码完如下:
begin 600 a
,SM+*Q];0N?K(RPT*
`
end
如果只算第二,三行,一共不到20字符
Ⅳ base64的加密解密例子
加密:
如:数据 1100 0001,1100 0010,1100 0011
3Byte的数据加密成4Byte数据,算法是把3B(24bit)的数分为4组每组6bit,每组前面加2位0
110000=》0011 0000
011100=》0001 1100
001011=》0000 1011
000011=》0000 0011
解密就是 反过来算
Ⅵ 能用bat程序进行Base64加密,解密吗
前端使用js: pwd = new Base64.encode(pwd); 后端使用java, new Base64().decodeBase64(pwd.getBytes()).toString(); java的Base64()有提供decode和decodeBase64()这俩种方法,我习惯的以为是decode(),结果却是后者. 希望对你有帮助.
Ⅶ base64加密中文乱码 golang 怎么解决
测试没问题
python">chinese:="简体中文"
str1:=base64.StdEncoding.EncodeToString([]byte(chinese))
fmt.Println(str1)
str2,_:=base64.StdEncoding.DecodeString(str1)
fmt.Println(string(str2))
代码是我自己写的!水平有限,反正功能实现了。原来是迅雷链接转换的函数,已经修改为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
结束 如果
'迅雷编码 = "
Ⅸ 为什么我用Base64加密后,不能将它解密
base64编码,不能算加密码,因为没有密钥。就是说谁都可以解码。
至于你说的不能解码,只能猜测是你的解码算法不正确。
网络上有关于base64的详细解释,应该对你有帮助。
Ⅹ 如何使用Base64进行加密和解密
其实Base64的加密和解密的算法不是很复杂,首先是定义自己64位的密钥,64个字符是固定,但是顺序是可以随自己的设计而变化。例如:
char[] BaseTable=new char[64]{
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
'0','1','2','3','4','5','6','7','8','9','+','/'};
接下来,在加密的时候就是对于需要加密的每个字符,通过一定的算法,转换成上面64字符的一种;而在解密的时候则是把64字符中任意一个字符反算出加密前的字符。对于每个字符的操作有很多方法,这里就不一一介绍了。需要注意的是“=”字符,在Base64加密算法中,是很重要的,它是起到补零作用。
以下是完整代码:
//----------------------------- Base64 class --------------------------------------
//---------------------------------------------------------------------------------
//---File:clsBase64
//---Description:The class file to encode string or decode string in base algorith
//---Author:Knight
//---Date:Oct.8, 2005
//---------------------------------------------------------------------------------
//----------------------------{ Base64 class }-------------------------------------
using System;
namespace Base64
{
/// <summary>
/// Summary description for clsBase64.
/// </summary>
public class clsBase64
{
private char[] source;
private char[] lookupTable;
private int length, length2, length3;
private int blockCount;
private int paddingCount;
public clsBase64()
{
//
// TODO: Add constructor logic here
//
source = null;
length = length2 = length3 =0;
blockCount = 0;
paddingCount = 0;
}
/// <summary>
/// Create base64 char array using default base64 char array
/// </summary>
/// <param name="CreatePara"></param>
/// <returns>return the new base64 char array</returns>
private char[] CreateBase64Char( ref char[] CreatePara )
{
char[] BaseTable=new char[64]{
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
'0','1','2','3','4','5','6','7','8','9','+','/'};
const int CREATE_TYPE = 8;
byte bParaValue = 0;
byte bTemp;
for( int i = 0; i < CreatePara.Length; i++ )
{
bTemp = ( byte )( CreatePara[i] );
switch( bTemp % CREATE_TYPE )
{
case 1:
// 00000001
bTemp =( byte )( bTemp ^ 0x01 );
break;
case 2:
// 00000010
bTemp =( byte )( bTemp ^ 0x02 );
break;
case 3:
// 00000100
bTemp =( byte )( bTemp ^ 0x04 );
break;
case 4:
// 00001000
bTemp =( byte )( bTemp ^ 0x08 );
break;
case 5:
// 00010000
bTemp =( byte )( bTemp ^ 0x10 );
break;
case 6:
// 00100000
bTemp =( byte )( bTemp ^ 0x20 );
break;
case 7:
// 01000000
bTemp =( byte )( bTemp ^ 0x40 );
break;
default:
// 10000000
bTemp =( byte )( bTemp ^ 0x80 );
break;
}
bParaValue =( byte )( bParaValue ^ bTemp );
}
char chrTemp;
int nIndex;
switch( bParaValue % CREATE_TYPE )
{
case 1:
// Exechange 0 <--> 1, 2 <--> 3, 4 <--> 5, 6 <--> 7
for( int i = 0; i < BaseTable.Length / CREATE_TYPE; i++ )
{
nIndex = i * CREATE_TYPE;
chrTemp = BaseTable[nIndex];
BaseTable[nIndex] = BaseTable[nIndex + 1];
BaseTable[nIndex + 1] = chrTemp;
chrTemp = BaseTable[nIndex + 2];
BaseTable[nIndex + 2] = BaseTable[nIndex + 3];
}
//remove paddings
length3=length2-paddingCount;
byte[] result=new byte[length3];
for(int x=0;x<length3;x++)
{
result[x]=buffer2[x];
}
return result;
}
private byte char2sixbit(char c)
{
if( c=='=' )
return 0;
else
{
for (int x=0;x<64;x++)
{
if (lookupTable[x]==c)
return (byte)x;
}
//should not reach here
return 0;
}
}
}
}