rc4加密工具
『壹』 網路安全快速入門5-密碼學及密碼破解工具CrypTool實戰
密碼學是保護信息安全的重要工具。本文將深入講解密碼學的基本概念,以及如何使用密碼學保護信息不被他人非法獲取。密碼學的核心是將信息轉換為非人類可讀的格式,這一過程稱為加密,而解密則是將加密信息還原成原始形式。加密信息稱為密文,其目的是確保信息的保密性。
密碼分析是對加密信息進行破解的技術。它依賴於數學分析和演算法,試圖在沒有密鑰的情況下解密信息。密碼分析攻擊的成功很大程度上取決於攻擊方法的選擇和密鑰的復雜度。常見的密碼分析方法包括暴力破解、字典攻擊和哈希碰撞攻擊。
在密碼學領域,常用的加密演算法包括消息摘要演算法(MD5),用於創建哈希值,確保數據完整性。MD5生成的哈希值理論上無法逆轉,因此被廣泛用於密碼加密和數據驗證。
本文介紹了一款名為CrypTool 1的開源教育工具,用於密碼學研究。通過CrypTool 1,可以實現加密和解密操作。例如,使用RC4演算法創建流密碼,然後嘗試使用蠻力攻擊進行破解。假設已知加密密鑰為24位,可以使用CrypTool 1進行解密操作。
總結,密碼學是確保信息安全的關鍵技術,通過加密和解密的過程,保護信息不被非法訪問。理解密碼學的基本概念和常用演算法,對於構建安全的通信系統至關重要。CrypTool 1為學習密碼學提供了實用的工具和平台。
『貳』 如何用rc4 加密演算法對excel vba進行加密
我就是專門做破解工作的,沒有說普通的加密很容易破解,你有密碼里加入大小寫,特殊符號以及空格,或者在加上幾個其它國家的語言文子(比如日文)10位以上,這樣就很難破解了,
如果這樣不行的話,你用最新版本的RAR(壓縮包加密)位數多一點,再加上大小寫,特殊符號以及空格或者在加上幾個其它國家的語言文字(比如日文)10位以上,目前基本無法破解,破解軟體對這種遠算只能達到一秒幾次。
namespace CryptoRC4
{
using System;
using System.Text;
public class clsRC4Engine
{
private static long m_nBoxLen = 255;
protected clsRC4Engine()
{
}
private static void GetKeyBytes( string Key, out byte[] m_nBox )
{
long index2 = 0;
m_nBox = new byte[m_nBoxLen];
Encoding ascii = Encoding.ASCII;
Encoding unicode = Encoding.Unicode;
byte[] asciiBytes = Encoding.Convert(unicode,ascii, unicode.GetBytes( Key ));
char[] asciiChars = new char[ascii.GetCharCount(asciiBytes,0,asciiBytes.Length)];
ascii.GetChars(asciiBytes,0,asciiBytes.Length,asciiChars,0);
long KeyLen = Key.Length;
for ( long count = 0; count < m_nBoxLen ; count ++ )
{
m_nBox[count] = (byte)count;
}
for ( long count = 0; count < m_nBoxLen ; count ++ )
{
index2 = (index2 + m_nBox[count] + asciiChars[ count % KeyLen ]) % m_nBoxLen;
byte temp = m_nBox[count];
m_nBox[count] = m_nBox[index2];
m_nBox[index2] = temp;
}
}
private static bool GetEncryptBytes( string sData, byte[] m_nBox,out byte[] EncryptedBytes )
{
EncryptedBytes = null;
bool toRet = true;
try
{
long i=0;
long j=0;
Encoding enc_default = Encoding.Unicode;
byte[] input = enc_default.GetBytes( sData );
EncryptedBytes = new byte[input.Length];
byte[] n_LocBox = new byte[m_nBoxLen];
m_nBox.CopyTo(n_LocBox,0);
long ChipherLen = input.Length + 1;
for ( long offset = 0; offset < input.Length ; offset++ )
{
i = ( i + 1 ) % m_nBoxLen;
j = ( j + n_LocBox[i] ) % m_nBoxLen;
byte temp = n_LocBox[i];
n_LocBox[i] = n_LocBox[j];
n_LocBox[j] = temp;
byte a = input[offset];
byte b = n_LocBox[(n_LocBox[i]+n_LocBox[j])% m_nBoxLen];
EncryptedBytes[offset] = (byte)((int)a^(int)b);
}
}
catch
{
EncryptedBytes = null;
toRet = false;
}
return toRet;
}
public static bool Encrypt( string sData, string Key, out string EncryptedString )
{
EncryptedString = null;
if( sData == null || Key == null ) return false;
byte[] m_nBox;
GetKeyBytes( Key, out m_nBox );
byte[] output;
if( GetEncryptBytes( sData, m_nBox, out output ) )
{
// Convert data to hex-data
EncryptedString = "";
for( int i = 0; i < output.Length; i++ )
EncryptedString += output[i].ToString( "X2" );
return true;
}
else
return false;
}
/// <summary>
/// Decrypt data using specific key
/// </summary>
/// <param name="EncryptedString"></param>
/// <param name="Key"></param>
/// <param name="sData"></param>
/// <returns></returns>
public static bool Decrypt( string EncryptedString, string Key, out string sData )
{
sData = null;
if( EncryptedString == null || Key == null ) return false;
else if( EncryptedString.Length % 2 != 0 ) return false;
byte[] m_nBox;
GetKeyBytes( Key, out m_nBox );
// Convert data from hex-data to string
byte[] bData = new byte[EncryptedString.Length / 2];
for( int i = 0; i < bData.Length; i++ )
bData[i] = Convert.ToByte( EncryptedString.Substring( i * 2, 2 ), 16 );
EncryptedString = Encoding.Unicode.GetString( bData );
byte[] output;
if( GetEncryptBytes( EncryptedString, m_nBox, out output ) )
{
sData = Encoding.Unicode.GetString( output );
return true;
}
else
return false;
}
}
}
調用:
//Encrypt data
string strEncryptedString;
if( clsRC4Engine.Encrypt( strValue, strKey, out strEncryptedString ) )
MessageBox.Show( strEncryptedString );
//Decrypt data
string strDecryptedString;
if( clsRC4Engine.Decrypt( strValue, strKey, out strDecryptedString ) )
MessageBox.Show( strDecryptedString );
另外一種
public static string encrypt_str( string str )
{
string s = "";
int i_Encrypt = ClsSetConst.m_Set_Encrypt;
char[] s_array = str.ToCharArray();
for(int i = 0; i < s_array.Length; i++)
{
int x = ((int)s_array[i]) + i_Encrypt;
s += (char)(x);
}
return s;
}
public void decript_str(string str)
{
string s = "";
int i_Encrypt = ClsSetConst.m_Set_Encrypt;
char[] s_array = str.ToCharArray();
for(int i = 0; i < s_array.Length; i++)
{
int x = ((int)s_array[i]) - i_Encrypt;
s += (char)x;
}
自己看看有沒有輸錯的地方吧
『叄』 Mircrosoft Office 2007採用的加密演算法與Word 2003有什麼不同
加密方式及演算法原理都一樣
Mircrosoft Office 2007與Word 2003採用的加密演算法 為文檔提供了三種級別的密碼保護方式。第一級是可以設置密碼來決定用戶是否有打開文檔的許可權;第二級是可以設置密碼來決定用戶是否有編輯文檔的許可權;第三級是可以對打開的Word文檔啟動強制保護,這樣將以只讀的方式打開。Word、Excel 和 PowerPoint 都使用 RC4 的對稱加密法對受密碼保護的文檔進行加密。RC4是一種流密碼演算法,它對數據的每個位元組進行操作,與RC2演算法一樣,它支持長度為40位、64位以及128位的密鑰,它都是由RSA Data Security Inc制定的,在給文檔加密時我們可以選擇指定密鑰的位數。
具體操作:我,們以Word 2003為例,首先在要保護的文檔中依次點擊「工具→選項」,然後在打開的「選項」窗口中點擊「安全性」標簽,在該標簽頁中我們在「打開文件時的密碼」後可以設置打開文檔時所需要的密碼。
密碼設置越復雜,被非法用戶成功破解的幾率越小。點擊「高級」按鈕,然後在打開的「加密類型」窗口中可以設置加密的演算法,在列表中選擇一個最合適的加密演算法,然後在「選擇密鑰長度」處設置密鑰的位數並點擊「確定」返回。當設置好後點擊「確定」,這時要求你再確認你所設置的密碼,當再次正確輸入密碼後點擊確定即可。
如果你不想他人隨意修改你的Word文檔,那麼只要在圖中的「修改文件時的密碼」後設置密碼,最後點擊「確定」並再次確認即可,這樣當要修改打開的文檔時須輸入正確的密碼才能修改文檔;如果你想禁止別人修改文檔,那麼只要在圖中點擊「保護文檔」,然後在展開的「保護文檔」面板中點擊「是,啟動強制保護」按鈕,接著在彈出的窗口中設置保護文檔的密碼即可。
Mircrosoft Office 2007操作方法也是大致相同,我就不累訴了!希望能幫到你!