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操作方法也是大致相同,我就不累诉了!希望能帮到你!