base64加密解密
‘壹’ javascript是不是自带了base64加密、解密函数是什么
是的,解密函数为:
window.btoa("test");//"dGVzdA=="
window.atob("dGVzdA==");//"test"
为什么要使用Base64加密呢?
‘贰’ JAVA怎么样实现Base64加密解密
package test;
import java.io.IOException;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
public class Test {
public static void main(String[] args) {
String str = "java12345";
String ret = null;
ret = new BASE64Encoder().encode(str.getBytes());
System.out.println("加密前:"+str+" 加密后:"+ret);
str = "amF2YTEyMzQ1";
try {
ret = new String(new BASE64Decoder().decodeBuffer(str));
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("解密前:"+str+" 解密后:"+ret);
}
}
‘叁’ 为什么我用Base64加密后,不能将它解密
base64编码,不能算加密码,因为没有密钥。就是说谁都可以解码。
至于你说的不能解码,只能猜测是你的解码算法不正确。
网络上有关于base64的详细解释,应该对你有帮助。
‘肆’ 关于base64、md5等加密解密问题
base64的作用不是加密,而是用来避免“字节”中不能转换成可显示字符的数值。
比如0-32的控制字符,空格,制表符都不能被打印在纸上,base64只使用大写小写数字标点。
可以打印在纸上,数据可以在传统平面媒介上携带。
md5是散列函数,提取数据的特征,输出是不可逆的散列值,用于代表某信息A而又不暴露信息A的内容。不直接用于加密文件。
‘伍’ 关于c#base64加密解密的问题
cWF6MzIx是UTF8得到的结果,cQBhAHoAMwAyADEA是Unicode得到的结果,编码不同,所以结果不同。
‘陆’ 关于WebSafeBase64的加密和解密,求解答
前端使用js: pwd = new Base64.encode(pwd);
后端使用java, new Base64().decodeBase64(pwd.getBytes()).toString();
java的Base64()有提供decode和decodeBase64()这俩种方法,我习惯的以为是decode(),结果却是后者.
‘柒’ 如何使用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;
}
}
}
}
‘捌’ 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
解密就是 反过来算
‘玖’ 我有一段base64 的加密原文,但是我怎么判断解密后有无数据丢失
没有办法的,base64是没有措施保证解密后的密文数据完整性的。
它设计的主要目的是,把8位完整的字节,转换为电话线上可传输的ASCII字符。
是为了适应早期互联网设备的复杂传输状态的。
根本没考虑完整性的需求,完整性,以解密后原文自身保证
现在的电子邮件协议啥的采取BASE64只不过是为了兼容而设置的。
懂了么?
‘拾’ base64编码加密解密程序,输出有乱码,为什么
这个我也碰到过,要用memset(m_strUserName,0,sizeof(m_strUserName))来初始化m_strUserName数组.