㈠ 如何对文本/字符串加密解密
加密解密的算法都没错,错的是解密程序里的文件操作方法。rewind(fp)没有必要。因为fp已经被close了。一般不推荐同时对一个文件又读又写,因为这样会导致很多缓冲区同步的问题。比如:fputc()和getc()之间,必须要调用fflush(fp);即使这样,还是会有问题。比如回车,getc()可能会返回两个字符,\n和\a。但是用fputc()写入的时候,分别写入\n和\a会把第二行第一个字符覆盖掉。正确的做法是:先把解密的数据保存到字符串里,全部结束之后,一次性把解密完的字符串写到文件里去。voidmain(){charch,name[30];charcontent[1000];intn=0;FILE*fp;printf("name:\a");gets(name);fp=fopen(name,"r+");if(fp==NULL){printf("Nofile:%s!\n\a",name);return;}ch=getc(fp);while(ch!=EOF){if((isalpha(ch))!=0){if((ch>='a'&&ch='A'&&ch<='D'))ch=ch+22;elsech=ch-4;}content[n++]=ch;ch=getc(fp);//ch=getc(fp);}content[n]=0;rewind(fp);fprintf(fp,"%s",content);fclose(fp);printf("%sok\a\n",name);printf("content:%s\n",content);printf("\n");}
㈡ 加密解密字符串的算法原理
我们经常需要一种措施来保护我们的数据,防止被一些怀有不良用心的人所看到或者破坏。在信息时代,信息可以帮助团体或个人,使他们受益,同样,信息也可以用来对他们构成威胁,造成破坏。在竞争激烈的大公司中,工业间谍经常会获取对方的情报。因此,在客观上就需要一种强有力的安全措施来保护机密数据不被窃取或篡改。数据加密与解密从宏观上讲是非常简单的,很容易理解。加密与解密的一些方法是非常直接的,很容易掌握,可以很方便的对机密数据进行加密和解密。
一:数据加密方法
在传统上,我们有几种方法来加密数据流。所有这些方法都可以用软件很容易的实现,但是当我们只知道密文的时候,是不容易破译这些加密算法的(当同时有原文和密文时,破译加密算法虽然也不是很容易,但已经是可能的了)。最好的加密算法对系统性能几乎没有影响,并且还可以带来其他内在的优点。例如,大家都知道的pkzip,它既压缩数据又加密数据。又如,dbms的一些软件包总是包含一些加密方法以使复制文件这一功能对一些敏感数据是无效的,或者需要用户的密码。所有这些加密算法都要有高效的加密和解密能力。
幸运的是,在所有的加密算法中最简单的一种就是“置换表”算法,这种算法也能很好达到加密的需要。每一个数据段(总是一个字节)对应着“置换表”中的一个偏移量,偏移量所对应的值就输出成为加密后的文件。加密程序和解密程序都需要一个这样的“置换表”。事实上,80x86 cpu系列就有一个指令‘xlat’在硬件级来完成这样的工作。这种加密算法比较简单,加密解密速度都很快,但是一旦这个“置换表”被对方获得,那这个加密方案就完全被识破了。更进一步讲,这种加密算法对于黑客破译来讲是相当直接的,只要找到一个“置换表”就可以了。这种方法在计算机出现之前就已经被广泛的使用。
对这种“置换表”方式的一个改进就是使用2个或者更多的“置换表”,这些表都是基于数据流中字节的位置的,或者基于数据流本身。这时,破译变的更加困难,因为黑客必须正确的做几次变换。通过使用更多的“置换表”,并且按伪随机的方式使用每个表,这种改进的加密方法已经变的很难破译。比如,我们可以对所有的偶数位置的数据使用a表,对所有的奇数位置使用b表,即使黑客获得了明文和密文,他想破译这个加密方案也是非常困难的,除非黑客确切的知道用了两张表。
与使用“置换表”相类似,“变换数据位置”也在计算机加密中使用。但是,这需要更多的执行时间。从输入中读入明文放到一个buffer中,再在buffer中对他们重排序,然后按这个顺序再输出。解密程序按相反的顺序还原数据。这种方法总是和一些别的加密算法混合使用,这就使得破译变的特别的困难,几乎有些不可能了。例如,有这样一个词,变换起字母的顺序,slient 可以变为listen,但所有的字母都没有变化,没有增加也没有减少,但是字母之间的顺序已经变化了。
但是,还有一种更好的加密算法,只有计算机可以做,就是字/字节循环移位和xor操作。如果我们把一个字或字节在一个数据流内做循环移位,使用多个或变化的方向(左移或右移),就可以迅速的产生一个加密的数据流。这种方法是很好的,破译它就更加困难!而且,更进一步的是,如果再使用xor操作,按位做异或操作,就就使破译密码更加困难了。如果再使用伪随机的方法,这涉及到要产生一系列的数字,我们可以使用fibbonaci数列。对数列所产生的数做模运算(例如模3),得到一个结果,然后循环移位这个结果的次数,将使破译次密码变的几乎不可能!但是,使用fibbonaci数列这种伪随机的方式所产生的密码对我们的解密程序来讲是非常容易的。
在一些情况下,我们想能够知道数据是否已经被篡改了或被破坏了,这时就需要产生一些校验码,并且把这些校验码插入到数据流中。这样做对数据的防伪与程序本身都是有好处的。但是感染计算机程序的病毒才不会在意这些数据或程序是否加过密,是否有数字签名。所以,加密程序在每次load到内存要开始执行时,都要检查一下本身是否被病毒感染,对与需要加、解密的文件都要做这种检查!很自然,这样一种方法体制应该保密的,因为病毒程序的编写者将会利用这些来破坏别人的程序或数据。因此,在一些反病毒或杀病毒软件中一定要使用加密技术。
循环冗余校验是一种典型的校验数据的方法。对于每一个数据块,它使用位循环移位和xor操作来产生一个16位或32位的校验和 ,这使得丢失一位或两个位的错误一定会导致校验和出错。这种方式很久以来就应用于文件的传输,例如 xmodem-crc。 这是方法已经成为标准,而且有详细的文档。但是,基于标准crc算法的一种修改算法对于发现加密数据块中的错误和文件是否被病毒感染是很有效的。
二.基于公钥的加密算法
一个好的加密算法的重要特点之一是具有这种能力:可以指定一个密码或密钥,并用它来加密明文,不同的密码或密钥产生不同的密文。这又分为两种方式:对称密钥算法和非对称密钥算法。所谓对称密钥算法就是加密解密都使用相同的密钥,非对称密钥算法就是加密解密使用不同的密钥。非常着名的pgp公钥加密以及rsa加密方法都是非对称加密算法。加密密钥,即公钥,与解密密钥,即私钥,是非常的不同的。从数学理论上讲,几乎没有真正不可逆的算法存在。例如,对于一个输入‘a’执行一个操作得到结果‘b’,那么我们可以基于‘b’,做一个相对应的操作,导出输入‘a’。在一些情况下,对于每一种操作,我们可以得到一个确定的值,或者该操作没有定义(比如,除数为0)。对于一个没有定义的操作来讲,基于加密算法,可以成功地防止把一个公钥变换成为私钥。因此,要想破译非对称加密算法,找到那个唯一的密钥,唯一的方法只能是反复的试验,而这需要大量的处理时间。
rsa加密算法使用了两个非常大的素数来产生公钥和私钥。即使从一个公钥中通过因数分解可以得到私钥,但这个运算所包含的计算量是非常巨大的,以至于在现实上是不可行的。加密算法本身也是很慢的,这使得使用rsa算法加密大量的数据变的有些不可行。这就使得一些现实中加密算法都基于rsa加密算法。pgp算法(以及大多数基于rsa算法的加密方法)使用公钥来加密一个对称加密算法的密钥,然后再利用一个快速的对称加密算法来加密数据。这个对称算法的密钥是随机产生的,是保密的,因此,得到这个密钥的唯一方法就是使用私钥来解密。
我们举一个例子:假定现在要加密一些数据使用密钥‘12345’。利用rsa公钥,使用rsa算法加密这个密钥‘12345’,并把它放在要加密的数据的前面(可能后面跟着一个分割符或文件长度,以区分数据和密钥),然后,使用对称加密算法加密正文,使用的密钥就是‘12345’。当对方收到时,解密程序找到加密过的密钥,并利用rsa私钥解密出来,然后再确定出数据的开始位置,利用密钥‘12345’来解密数据。这样就使得一个可靠的经过高效加密的数据安全地传输和解密。
一些简单的基于rsa算法的加密算法可在下面的站点找到:
ftp://ftp.funet.fi/pub/crypt/cryptography/asymmetric/rsa
三.一个崭新的多步加密算法
现在又出现了一种新的加密算法,据说是几乎不可能被破译的。这个算法在1998年6月1日才正式公布的。下面详细的介绍这个算法:
使用一系列的数字(比如说128位密钥),来产生一个可重复的但高度随机化的伪随机的数字的序列。一次使用256个表项,使用随机数序列来产生密码转表,如下所示:
把256个随机数放在一个距阵中,然后对他们进行排序,使用这样一种方式(我们要记住最初的位置)使用最初的位置来产生一个表,随意排序的表,表中的数字在0到255之间。如果不是很明白如何来做,就可以不管它。但是,下面也提供了一些原码(在下面)是我们明白是如何来做的。现在,产生了一个具体的256字节的表。让这个随机数产生器接着来产生这个表中的其余的数,以至于每个表是不同的。下一步,使用"shotgun technique"技术来产生解码表。基本上说,如果 a映射到b,那么b一定可以映射到a,所以b[a[n]] = n.(n是一个在0到255之间的数)。在一个循环中赋值,使用一个256字节的解码表它对应于我们刚才在上一步产生的256字节的加密表。
使用这个方法,已经可以产生这样的一个表,表的顺序是随机,所以产生这256个字节的随机数使用的是二次伪随机,使用了两个额外的16位的密码.现在,已经有了两张转换表,基本的加密解密是如下这样工作的。前一个字节密文是这个256字节的表的索引。或者,为了提高加密效果,可以使用多余8位的值,甚至使用校验和或者crc算法来产生索引字节。假定这个表是256*256的数组,将会是下面的样子:
crypto1 = a[crypto0][value]
变量'crypto1'是加密后的数据,'crypto0'是前一个加密数据(或着是前面几个加密数据的一个函数值)。很自然的,第一个数据需要一个“种子”,这个“种子” 是我们必须记住的。如果使用256*256的表,这样做将会增加密文的长度。或者,可以使用你产生出随机数序列所用的密码,也可能是它的crc校验和。顺便提及的是曾作过这样一个测试: 使用16个字节来产生表的索引,以128位的密钥作为这16个字节的初始的"种子"。然后,在产生出这些随机数的表之后,就可以用来加密数据,速度达到每秒钟100k个字节。一定要保证在加密与解密时都使用加密的值作为表的索引,而且这两次一定要匹配。
加密时所产生的伪随机序列是很随意的,可以设计成想要的任何序列。没有关于这个随机序列的详细的信息,解密密文是不现实的。例如:一些ascii码的序列,如“eeeeeeee"可能被转化成一些随机的没有任何意义的乱码,每一个字节都依赖于其前一个字节的密文,而不是实际的值。对于任一个单个的字符的这种变换来说,隐藏了加密数据的有效的真正的长度。
如果确实不理解如何来产生一个随机数序列,就考虑fibbonacci数列,使用2个双字(64位)的数作为产生随机数的种子,再加上第三个双字来做xor操作。 这个算法产生了一系列的随机数。算法如下:
unsigned long dw1, dw2, dw3, dwmask;
int i1;
unsigned long arandom[256];
dw1 = {seed #1};
dw2 = {seed #2};
dwmask = {seed #3};
// this gives you 3 32-bit "seeds", or 96 bits total
for(i1=0; i1 < 256; i1++)
{
dw3 = (dw1 + dw2) ^ dwmask;
arandom[i1] = dw3;
dw1 = dw2;
dw2 = dw3;
}
如果想产生一系列的随机数字,比如说,在0和列表中所有的随机数之间的一些数,就可以使用下面的方法:
int __cdecl mysortproc(void *p1, void *p2)
{
unsigned long **pp1 = (unsigned long **)p1;
unsigned long **pp2 = (unsigned long **)p2;
if(**pp1 < **pp2)
return(-1);
else if(**pp1 > *pp2)
return(1);
return(0);
}
...
int i1;
unsigned long *aprandom[256];
unsigned long arandom[256]; // same array as before, in this case
int aresult[256]; // results go here
for(i1=0; i1 < 256; i1++)
{
aprandom[i1] = arandom + i1;
}
// now sort it
qsort(aprandom, 256, sizeof(*aprandom), mysortproc);
// final step - offsets for pointers are placed into output array
for(i1=0; i1 < 256; i1++)
{
aresult[i1] = (int)(aprandom[i1] - arandom);
}
...
变量'aresult'中的值应该是一个排过序的唯一的一系列的整数的数组,整数的值的范围均在0到255之间。这样一个数组是非常有用的,例如:对一个字节对字节的转换表,就可以很容易并且非常可靠的来产生一个短的密钥(经常作为一些随机数的种子)。这样一个表还有其他的用处,比如说:来产生一个随机的字符,计算机游戏中一个物体的随机的位置等等。上面的例子就其本身而言并没有构成一个加密算法,只是加密算法一个组成部分。
作为一个测试,开发了一个应用程序来测试上面所描述的加密算法。程序本身都经过了几次的优化和修改,来提高随机数的真正的随机性和防止会产生一些短的可重复的用于加密的随机数。用这个程序来加密一个文件,破解这个文件可能会需要非常巨大的时间以至于在现实上是不可能的。
四.结论:
由于在现实生活中,我们要确保一些敏感的数据只能被有相应权限的人看到,要确保信息在传输的过程中不会被篡改,截取,这就需要很多的安全系统大量的应用于政府、大公司以及个人系统。数据加密是肯定可以被破解的,但我们所想要的是一个特定时期的安全,也就是说,密文的破解应该是足够的困难,在现实上是不可能的,尤其是短时间内。
㈢ C# 在本地存储密码字符串,怎么加密
/// <summary>
/// DES加密字符串
/// </summary>
/// <param name="encryptString">待加密的字符串</param>
/// <param name="encryptKey">加密密钥,要求为8位</param>
/// <returns>加密成功返回加密后的字符串,失败返回源串</returns>
public static string Encode(string encryptString, string encryptKey)
{
encryptKey = Utils.GetSubString(encryptKey, 8, "");
encryptKey = encryptKey.PadRight(8, ' ');
byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));
byte[] rgbIV = Keys;
byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider();
MemoryStream mStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
cStream.Write(inputByteArray, 0, inputByteArray.Length);
cStream.FlushFinalBlock();
return Convert.ToBase64String(mStream.ToArray());
}
/// <summary>
/// DES解密字符串
/// </summary>
/// <param name="decryptString">待解密的字符串</param>
/// <param name="decryptKey">解密密钥,要求为8位,和加密密钥相同</param>
/// <returns>解密成功返回解密后的字符串,失败返源串</returns>
public static string Decode(string decryptString, string decryptKey)
{
try
{
decryptKey = Utils.GetSubString(decryptKey, 8, "");
decryptKey = decryptKey.PadRight(8, ' ');
byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey);
byte[] rgbIV = Keys;
byte[] inputByteArray = Convert.FromBase64String(decryptString);
DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider();
MemoryStream mStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
cStream.Write(inputByteArray, 0, inputByteArray.Length);
cStream.FlushFinalBlock();
return Encoding.UTF8.GetString(mStream.ToArray());
}
catch
{
return "";
}
}
㈣ c语言编写的程序,在输入密码时,如何加密
加密和解密算法是程序编制中的重要一环。试想,如果我们平时使用的腾讯QQ、支付宝支付密码、今日头条账号密码那么轻易就被别人盗取的话,很多不可以预料的事情就会发生!
在现实生活中,我们遇到过太多QQ密码被盗取的情况,有的朋友QQ被盗之后,骗子利用朋友间信任骗取钱财的事情屡见不鲜。支付宝也曾出现过支付宝账户被恶意盗取的事件,对用户利益造成了严重损害!这些在技术上都指向了同一相关问题:软件加密算法的强壮程度。今天,小编利用C语言来简单实现一种加密方法。下面是源代码。
需要说明:程序利用了ascii码值的按照一定规律变换实现加密,对于解密过程,则是加密的逆过程。下面是程序的运行结果。
4190阅读
搜索
编程免费课程300节
初学编程100个代码
java自学一般要学多久
5秒破解excel密码
python必背100源代码
40岁零基础学编程
㈤ 【紧急求助】vb 根据密码加密字符串
无论你的密码是什么,都是文字
文字就有ascii码。
将他们的ascii 码作为密码进行加密。具体如下:
比如密码是:123
对应的ascii码
49 50 51
然后,用这个去加密数据,方法码
定义byte类型变量
三个为一个轮回
比如将要加密的数据的其中某三个的byte指分别为
102 54 158
那么,就分别用我们的49 50 51去加他们,得数如果大于255,则减去255
㈥ 字符密码怎么设置啊
设密码有几个要点就是:
1、密码的位数不要短于6位,使用大写字母和小写字母、标点和数字的集合
2、不要以任何单词、生日、数字、手机号做为密码,这种太容易就能破解了,比如说生日吧,看似有8位,但我们一般都是出生在19XX的,一年只有12个月,一个月最多只有31天,XXX,不要几分钟就可以试出来,还不需要程序来算了
3、密码中的英文最好有大小之分
4、如果在程序允许的情况下,最好能加上英文半角的符号
5、不要用a、b、c等比较小顺序的字母或数字开头,因为用字典暴力破解的程序,一般都是从数字或英文字母排序开始算的,如果设为z的话,破解的机率就小很多
6、因为这种无规律性的密码不好记忆,有种比较简单的方法,比如说你的密码是blueidea吧,首先加头,在前面加一个$号,就成为了$blueidea,然后就是加尾,加上一个)号,就成了$blueidea)号了,这种还是不安全,我们再把中间的打乱,$ideablue),嘻嘻,还不错,随便把中间的某几个改为大字字母吧,$IdeabLue),这种看起来差不多了„„等会,加上一两上数字吧$I1de9ab9Lu8e20),这不就成为了一个非常安全的密码了吗,如果你觉得还不安全的话,可以把中间的字母打乱就OK了
7、一些程序或注册入口对密码设定的比较死,只能用数字和字母,那样怎么办了,还是以刚才的来做实验吧,先是blueidea,改大小写bLUeIdEa,打乱EaIdbLUe,加数字E9aI4db2LU6e,OK,这就安全了
8、可以用一句话来设定密码,比如说“好好学习,天天向上”吧,先取拼音的第一个字母,hhxxttxs,变h2x2ttxs,再变H2X2tTXs,再变tTXsH2X2,加个头和尾,ItTXsH2X2O,一个密码就成功了
9、如果认为这种方法比较麻烦的话,可以强记两到三个比较复杂的密码,用的时候把它们重新排序,比如说常用密码为ItTXs和Lu8e20,组合ItTXsLu8e20,打散Lu8eItTXs20,新密码诞生了
10、注意在自己的电脑中安全比较可靠的杀毒软件,如果你的电脑里有木马的话,再复杂的密码也是没有任何作用的,不要上不可信的网站,不要让别人很容易的得到你的信息。这包括身份证号码、电话号码、社会安全号码、您的手机号码、您所居住的街道的名字,等等
11、最好只注册那种用MD5算法加密论坛,那样管理员就无法知道你的密码了,我见过很多论坛因为加密不好,被别人破了管理员密码,最后把论坛用户的QQ,信箱等等都破了。
12、定期更改密码,比如说每个月的第一个星期五,也不用重新想,就是把密码的排序改一下就行了,好记
13、不要所有的地方都用一个密码,根据重要和非重要的原则来设定密码,比如说我一般不是很重要的地方,都用111111来做密码
14、最后一点就是,不要把自己的密码写在别人可以看到的地方,比如说笔记本,纸巾上等等,最好是强记在脑子里,不要在输入密码的时候让别人看到,多练几次,打快了,旁人自然就看不到了,更不能把自己的密码告诉别人,这样对自己对别人都是很不负责任的,保护好你的密码,尊重自己
如何设置高强度密码 ?
先了解一下破解密码的方法(需要用软件,你自己一个一个试密码基本上没有什么可能成
功):
一个是暴力破解,比如说黑客可以在软件上设定破解长度为6个字符(不成功再改长度),用所有字符(如数字,大小写字母,标点符号,特殊符号)穷举破解。这种方法优点是可以依次试出密码所有的可能,只是时间上有长短。当然如果密码强度高,即使以现在的双核,也要破解上百年。下表是用双核电脑暴力破解密码要的时间。
数字密码
6位 瞬间
8位163天
10位 348天
普通大小写字母
6位 33分钟
8位 62天
数字+大小写字母
6位 一个半小时
8位 253天
数字+大小写字母+标点
6位 22小时
8位 23年
第二种是用字典,就是说把比如两万个(或更多)英语单词或短词、把人们常用的姓名拼音、出生日期、及通过某种调查人们常用的密码存到比如说TXT文件中,破解软件依次使用这个文件中的各个单词,它的优点是高效,但缺点就是无论你的字典有多大,但只要字典中没有被破解的正确密码是破不出来的。
还有一种是掩码破解:知道密码中的部分字符,用暴力破解或字典破解来破剩余的部分
上面密码破解过程中,如果用两台电脑分段破解可以减少破解时间。
再说一下什么是加密,比如MD5,是用一个函数将需要加密的“字符串”转换成一个长度为128bit长的字符串,因为函数不可逆,所以即使你知道加密后的字符也不能推出原“字符串”。这种密文破解方法只有一个,就是我同样用MD5方法,加密“暴力破解”所列出的所有字符,把它的结果与要破解的结果相比较,如果完全相同,那么这就是密码。现在流行的还有如AES。
先说一下不容易破解的密码 密码与用户名相同(破解密码的早想到了) 生日、身份证、英文单词、英语短语(如imissyou,thankyou)姓名拼音作密码22222、uuuuuu、123456、123321、opqrst(连续的字母) 单纯的数字做密码
由上面的表可以看出,密码长度越长越好,最好不要少于10位,并且不要用纯数字。
有的文章说英文、数字、特殊字符交错的密码很难破,那是不错,可是我们生活中会有许多密码你都来个Ucliw86,&*ls的确非常难破,但我想也不太好记。记纸上?那你的纸安全吗?纸丢了你再想是吧?
最好先从长度下手,比如“haohaizi1234.”(共13位),从破解者的角度来说他不知道你使用的密码多长。
如果是暴力破解一般会从6到9位开始破解,如果只是用“数字+大小写字母”从表格中来看即使是8位也要253天,而且也根本不可能破解出来。因为上面那个密码是13位,而且其中有“.”标点。只有破解者用“数字+大小写字母+标点”来破解才有可能成功,可是13位的破解时间远大于8位破解时间(23年)。
如果是从字典破解,在比较大的字典中,“1234”在字典中肯定有,“.”也肯定有,“hao”:“hai”“zi”,也可能会分别有。如果一个字典中只有这五个元素,那么它们所有的组合可能是1!+2!+3!+4!+5!=153种可能。但是实际上来讲,即使一个字典全部拥有这些元素,那么这个字典一定是一个很巨大的字典,如果他想用字典中所有的元素重新排列合,(如果这个字典中有N个元素)那么这个可能性就是N!+(N-1)!+(N-2)!+„+3!+2!+1!,是一个绝对的无穷大,使字典破解也成为了不可能。
比如说,你一般用密码不用标点,那么你可以在你所有的密码前加一个@,这样你很好记的,可是它不仅为你增加了一位,而且从破解者来说增加了一个“标点符号”破解时间高度增加。
为了避免如“hao”“hai”这样的拼音可能会出现,那么你可以这样,比如说你的“haohaizi”你给自己一个规定,我取各个拼音的第一位+第二位+第三位(没有则空)那么就可以改为“hhzaaioi”那么这个字符串的破解只可能通过暴力。
如果只用数字部分是很不安全的,可是如果是在其它各个部分再加上数字,那么这个破解难度又增大许多比如“hhzaaioi12345”首先来说,前一部分“hhzaaioi”不可能用字典破解,那么整体也不可能用字典破解了。只有暴力才可能成功,如果是暴力,破解者并不知道你的密码有多少位,而且有知道你的密码中都有什么组合的,他可能会从6-9位开始,即使到了12位,13位,时间上,那是基本不可能了。
你可以把数字转换成特殊符号1,2,3,4„分别转换为!,@,#,$;或者用像形,1,2,3,4,„转换为I,Z,M,A„比如你可以规定自己数字的最后一个用这个方法。
如果数字部分你不想用固定数字也有办法,比如你给一个自己的日记加密,你可以把这个文件的修改时间作为你的密码数字部分,如20070217,没有密码不可能打开你的文件,这样使文件的修改时间固定在你自己修改文件的时间,所以你可以查看文件的修改时间,得知你的数字部分密码,这样对你的记忆没有什么负担,当然,要在每次你修改文件的时候修改密码,不然,你也要自己一个一个试上次可能的修改时间。有人可能说这个数字用字典很可能破解。的确不错,但是加上你前面设置的字典不可能破解的字母,
使整体上不可能字典破解了。
你还可以给自己规定,在密码中,我把字母部分的第一个字母大写,这样暴力破解中,只有增加一个大字字母才可能破解成功(事实上破解者并不知道你有用大写),而你
给自己这个规定却不会增加你的记忆负担。
通过以上的规则,我们可以把“haohaizi1234.”转换成“hhzaaioi123$.”(13位),强度已经非常非常高了。而且这些规则你自己定好,以后用起来就顺手了,即使给别人一个你的密码,他也不太可能推出你的规则及别的密码(下个密码你用huaihaizi再推出
来不就完了)
有人可能会问,那么6位的银行密码安全吗?(这个6位只是你用银行卡或存折时的6位,而网上银行10位,16位,大小写,都可以的),而且银行的网络系统是专用的,除非银行内部的人,通过国际inter网是没办法进入他们的专用网络的。网上银行是通过密码、证书、信息加密、CA认证等把关才能查询,使用自己的资金的。
再谈一下网上银行,我用的是建行的“个人网上银行专业版”,有两个密码一个证书或者usbkey,保证了交易的安全性(只要你不人为的透露出自己的密码),如果你按照银行给你的安全注意事项却使用,那也是不可能有闪失的。也就是说,不是密码不安
全,而是安全意识有时还达不到。 这些是对于密码本身的强度来说的,可是对于此外还有要注意的地方。
大家最好不要用word本身的文件加密功能加密,如果破解默认加密格式,只要用一个软件联网后几秒中就可以破解掉。如果要这种方式加密,也要选择“高级”用RC4(128位)方式加密(这种方式加密强度高许多)。
用winrar加密也是一个很方便而有效的选择,注意的是加密只有在对文件加密的时候才能添加密码,对3.0以后的版本是用AES128加密的,破解难度比较大。
密码强度再高,如果别人用记录键盘的木马盗号,也太危险了。首先,如果是网上论坛,QQ,网游的账号,一定要先申请“密码保护”,并且一定记清楚填写的资料。一些账号输入密码时可以用如123456你可以先输入456再把光标移动到开头再输入123。
从理论上来说,所有的密码即使只用暴力破解,也一定可以破解出来,只是时间问题,而且计算机的速度也越来越快。但是有一点,如果一个密码的破解时间为100年那么这个密码也已经够用了,我想100年以后,这个密码你可能就不再用了。也就是说密码的有一定的安全期限,比如说,你在一个银行开一个账户,在你在把这个银行账户注销的时候,密码也就无所谓了(只要你不把这个密码用在下个银行账户)。
㈦ 超长字符串如何加密
可以用DES或3DES加密,速度还是比较快的
㈧ 在程序中如何将字符串常量进行加密
首先,要对这个常量字符串进行加密。
然后,加密用的密码(密钥)需要进行特殊处理。
比如:要保护字符串123456,用密钥13579进行加密。
密钥13579的16进制数组形式为:{0x31, 0x33, 0x35, 0x37, 0x39, 0x00}
你可以对这个数组进行数据干扰。比如:高位乱填数据(因为你知道是3),低位都加/减某数值:
变为了:{ 0xA3, 0xF5, 0x67, 0xD9, 0x3A, 0x00 }
你在代码中对每一位进行恢复:
*p &= 0x0F, *p |= 0x30, *p -= 0x02,如此得到你的原始密码:13579;
反汇编看到的你的密钥串为:0xA3, 0xF5, 0x67, 0xD9, 0x3A, 0x00。
不知道你思路的话,只能碰运气猜啦。
在上面两种干扰方法基础上,你甚至还可以把高低位调换,这样就又加了一层干扰信息。
别人想破解也得好好猜一会了。