base64演算法解密
『壹』 javascript是不是自帶了base64加密、解密函數是什麼
是的,解密函數為:
window.btoa("test");//"dGVzdA=="
window.atob("dGVzdA==");//"test"
為什麼要使用Base64加密呢?
『貳』 base64 decode解密碼
首先說,BASE64不是加密,他只是把數據以16進治的形勢表現出來而已,你給的代碼也沒有加密!
代碼的內容是
eval(base64_decode('...............=='))
其意思如下:
1.使用base64_decode函數反編譯被BASE64編碼的內容
2.用eval函數執行base64_decode函數的執行結果
也就是說,把base64_decode函數的參數拿出來,再用base64_decode函數執行一下,輸出其結果就可以了。
base64_decode的使用方法參考下面鏈接。
---------------------------------------------------------
return;?>之後的代碼無法解讀,貌似2進治文件的內容。
之前的代碼如下,#後面的是下一行base64加密的部分
# $IIIIIIIIIIIl='base64_decode';$IIIIIIIIIIII='gzinflate';
eval(base64_decode('RlJzs='));
$OOO0O0O00=__FILE__;
$OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');
$OO00O0000=3968;
$OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};
$OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};
$OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};
$O0O0000O0='OOO0000O0';
#$OO0OO0000=$OOO000000{17}.$OOO000000{12}.$OOO000000{18}.$OOO000000{5}.$OOO000000{19};
#if(!0)$O000O0O00=$OO0OO0000($OOO0O0O00,'rb');
#$OO0OO000O=$OOO000000{17}.$OOO000000{20}.$OOO000000{5}.$OOO000000{9}.$OOO000000{16};
#$OO0OO00O0=$OOO000000{14}.$OOO000000{0}.$OOO000000{20}.$OOO000000{0}.$OOO000000{20};
#$OO0OO000O($O000O0O00,1259);
#$OO00O00O0=($OOO0000O0($OO0OO00O0($OO0OO000O($O000O0O00,728),'mQX6dsqGnkzBUVHWcYufwbOrT/e1LI+=','#nopqrstuvwxyz0123456789+/')));
#eval($OO00O00O0);
eval(($$O0O0000O0('ZXZhbCgkT08wME8wME8wKTs=')));
return;
『叄』 在Java中如何進行BASE64編碼和解碼
importsun.misc.BASE64Encoder;
importsun.misc.BASE64Decoder;
//將s進行BASE64編碼
publicstaticStringgetBASE64(Strings){
if(s==null)returnnull;
return(newsun.misc.BASE64Encoder()).encode(s.getBytes());
}
//將BASE64編碼的字元串s進行解碼
(Strings){
if(s==null)returnnull;
BASE64Decoderdecoder=newBASE64Decoder();
try{
byte[]b=decoder.decodeBuffer(s);
returnnewString(b);
}catch(Exceptione){
returnnull;
}
}
『肆』 面向對象基礎知識之文件加密解密
文件加密解密是開發中經常用到的一個功能點,常見於客戶端項目,襪散需要對配置數據、參數設置、數據字典等需要隱匿,來增強客戶端的安全性。
本章我們介紹兩種常見文件加密解密方法
1.自定義加密解密函數,思路是文件轉成Byte[],對byte元素使用對稱加密演算法對齊加密。加密後的byte[]轉成base64。解密文件使用base64加密的byte[]解密即可生成原文件。
2.使用 System.Security.Cryptography. RijndaelManaged,這種加密告好猛需要提襪橋供32位密碼和16位向量密碼
//加密
string pwd = "" ; //32位,密碼
string ivpwd = "gjhdjfhdjdkdssad" ; //16位,向量密碼
RijndaelManaged aes = new RijndaelManaged();
byte [] pwdBytes = System.Text.Encoding.UTF8.GetBytes(pwd);
aes.Key = pwdBytes;
aes.IV = Encoding.UTF8.GetBytes(ivpwd);
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
byte [] readFileByte = ReadByte(filePath);
ICryptoTransform transform = aes.CreateEncryptor();
byte [] fielBuffer = transform.TransformFinalBlock(readFileByte, 0, readFileByte.Length); //注意這里返回的是加密後的byte[]
//解密
RijndaelManaged aes = new RijndaelManaged();
byte [] pwdBytes = System.Text.Encoding.UTF8.GetBytes(pwd);
aes.Key = pwdBytes;
aes.IV = Encoding.UTF8.GetBytes(ivpwd);
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
byte [] readFileByte = ReadByte(filePath);
ICryptoTransform transform = aes.CreateDecryptor();
//注意這里返回的是解密後的byte[]
byte [] fielBuffer = transform.TransformFinalBlock(readFileByte, 0, readFileByte.Length);
加密方式越復雜需要的計算量越大,速度相應會變慢;加密方式需要結合項目來做選擇。客戶端項目對於數據保密性較強建議使用RSA和 RijndaelManaged 混合加密。
『伍』 如何使用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是一種高強度的加密演算法是不可破解的對嗎
Base64不是加密演算法,它僅僅是一種編碼方式,演算法也是公開的,所以不能依賴兄桐它進行加密。Base64是一種編悄賀碼羨運坦方式,不是加密演算法,它是沒有可讀性的,但不代表這個編碼就是加密的。加密需要保證沒有秘鑰的人無法解密信息,更無法從密文中破解任務明文信息,但Base64可以很輕松的反編碼。另外它沒有用到秘鑰 不具有加密演算法的安全性。
『柒』 為什麼我用Base64加密後,不能將它解密
base64編碼,不能算加密碼,因為沒有密鑰。就是說誰都可以解碼。
至於你說的不能解碼,只能猜測是你的解碼演算法不正確。
網路上有關於base64的詳細解釋,應該對你有幫助。