全国最大诚信黑客接单

网站入侵,红包控制,密码破解,木马制作,app作弊程序开发

黑客利用公钥(使用公钥加密)

本文目录一览:

随机非对称加密

因为对方采用了非对称加密算法的公钥来加密整个数据包,非对称加密算法的优点在于有2个密钥,公钥和私钥,用公钥加密的数据包只有用私钥才可以解密,所以数据包被截获后,黑客在没有私钥的情况下,是无法解密数据包的,从而无法分析随机对称密钥. 简单说个流程,

设未加密文件为x,用户生成一个随机密钥Key,然后用对称算法(比如AES)把x加密得到y发给对方,对称加密算法的特点,x用key加密得到y,那么在用key对y解密得到x;所以在发给对方时一定要包括Key,否则对方收到加密的数据y也无法解密,于是此时发送的数据包为Key+y. 那么黑客截获数据包之后,由于随机密钥是包含在数据段的且是明文,所以黑客只要分析出密钥Key,就可以解密y得到x;

这个时候非对称算法被引入了,比如目前广泛引用的RSA,在发送数据包Key+y之前,用对方的公钥public Key加密数据包,得到f(Key+y),此时新的加密后的f(Key+y),黑客即使截获到f(key+y),在没有对应私钥的情况下是无法解密得到Key+y的,当然也无法分析出对称密钥key了.

计算机网络面临的安全性威胁可分为哪两类?分别包含哪些内容?

计算机网络安全所面临的威胁主要可分为两大类:一是对网络中信息的威胁,二是对网络中设备的威胁。

从人的因素 考虑,影响网络安全的因素包括:

(1)人为的无意失误。

(2)人为的恶意攻击。一种是主动攻击,另一种是被动攻击。

(3)网络软件的漏洞和“后门”。

针对您的问题这个一般都是针对WEB攻击吧!一般有钓鱼攻击!网站挂马!跨站攻击!!DDOS这些吧!至于防御方案!不同情况不一样!没有特定标准!+

内部威胁,包括系统自身的漏洞,计算机硬件的突发故障等外部威胁,包括网络上的病毒,网络上的恶意攻击等

针对网络安全的威胁主要有以下内容

1.软件漏洞:

每一个操作系统或网络软件的出现都不可能是无缺陷和漏洞的。这就使我们的计算机处于危险的境地,一旦连接入网,将成为众矢之的。

2.配置不当:

安全配置不当造成安全漏洞,例如,防火墙软件的配置不正确,那么它根本不起作用。对特定的网络应用程序,当它启动时,就打开了一系列的安全缺口,许多与该软件捆绑在一起的应用软件也会被启用。除非用户禁止该程序或对其进行正确配置。否则,安全隐患始终存在。

3.安全意识不强:

用户口令选择不慎,或将自己的帐号随意转借他人或与别人共享等都会对网络安全带来威胁。

4.病毒:

目前数据安全的头号大敌是计算机病毒,它是编制者在计算机程序中插入的破坏计算机功能或数据。影响计算机软件、硬件的正常运行并且能够自我复制的一组计算机指令或程序代码。计算机病毒具有传染性、寄生性、隐蔽性、触发性、破坏性等特点。因此,提高对病毒的防范刻不容缓。

5.黑客:

对于计算机数据安全构成威胁的另一个方面是来自电脑黑客(backer)。电脑黑客利用系统中的安全漏洞非法进入他人计算机系统,其危害性非常大。从某种意义上讲,黑客对信息安全的危害甚至比一般的电脑病毒更为严重。

以上是几种对网络安全的威胁,生活中学习网络安全小知识,做好预防措施。

公钥和私钥技术的区别

(一)对称加密(Symmetric Cryptography)

对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key),这种方法在密码学中叫做对称加密算法。对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中。

对称加密通常使用的是相对较小的密钥,一般小于256 bit。因为密钥越大,加密越强,但加密与解密的过程越慢。如果你只用1 bit来做这个密钥,那黑客们可以先试着用0来解密,不行的话就再用1解;但如果你的密钥有1 MB大,黑客们可能永远也无法破解,但加密和解密的过程要花费很长的时间。密钥的大小既要照顾到安全性,也要照顾到效率,是一个trade-off。

2000年10月2日,美国国家标准与技术研究所(NIST--American National Institute of Standards and Technology)选择了Rijndael算法作为新的高级加密标准(AES--Advanced Encryption Standard)。.NET中包含了Rijndael算法,类名叫RijndaelManaged,下面举个例子。

加密过程:

private string myData = "hello";

private string myPassword = "OpenSesame";

private byte[] cipherText;

private byte[] salt = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x5, 0x4, 0x3, 0x2, 0x1, 0x0 };

private void mnuSymmetricEncryption_Click(object sender, RoutedEventArgs e)

{

var key = new Rfc2898DeriveBytes(myPassword, salt);

// Encrypt the data.

var algorithm = new RijndaelManaged();

algorithm.Key = key.GetBytes(16);

algorithm.IV = key.GetBytes(16);

var sourceBytes = new System.Text.UnicodeEncoding().GetBytes(myData);

using (var sourceStream = new MemoryStream(sourceBytes))

using (var destinationStream = new MemoryStream())

using (var crypto = new CryptoStream(sourceStream, algorithm.CreateEncryptor(), CryptoStreamMode.Read))

{

moveBytes(crypto, destinationStream);

cipherText = destinationStream.ToArray();

}

MessageBox.Show(String.Format("Data:{0}{1}Encrypted and Encoded:{2}", myData, Environment.NewLine, Convert.ToBase64String(cipherText)));

}

private void moveBytes(Stream source, Stream dest)

{

byte[] bytes = new byte[2048];

var count = source.Read(bytes, 0, bytes.Length);

while (0 != count)

{

dest.Write(bytes, 0, count);

count = source.Read(bytes, 0, bytes.Length);

}

}

解密过程:

private void mnuSymmetricDecryption_Click(object sender, RoutedEventArgs e)

{

if (cipherText == null)

{

MessageBox.Show("Encrypt Data First!");

return;

}

var key = new Rfc2898DeriveBytes(myPassword, salt);

// Try to decrypt, thus showing it can be round-tripped.

var algorithm = new RijndaelManaged();

algorithm.Key = key.GetBytes(16);

algorithm.IV = key.GetBytes(16);

using (var sourceStream = new MemoryStream(cipherText))

using (var destinationStream = new MemoryStream())

using (var crypto = new CryptoStream(sourceStream, algorithm.CreateDecryptor(), CryptoStreamMode.Read))

{

moveBytes(crypto, destinationStream);

var decryptedBytes = destinationStream.ToArray();

var decryptedMessage = new UnicodeEncoding().GetString(

decryptedBytes);

MessageBox.Show(decryptedMessage);

}

}

对称加密的一大缺点是密钥的管理与分配,换句话说,如何把密钥发送到需要解密你的消息的人的手里是一个问题。在发送密钥的过程中,密钥有很大的风险会被黑客们拦截。现实中通常的做法是将对称加密的密钥进行非对称加密,然后传送给需要它的人。

(二)非对称加密(Asymmetric Cryptography)

1976年,美国学者Dime和Henman为解决信息公开传送和密钥管理问题,提出一种新的密钥交换协议,允许在不安全的媒体上的通讯双方交换信息,安全地达成一致的密钥,这就是“公开密钥系统”。相对于“对称加密算法”这种方法也叫做“非对称加密算法”。

非对称加密为数据的加密与解密提供了一个非常安全的方法,它使用了一对密钥,公钥(public key)和私钥(private key)。私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。非对称加密使用这对密钥中的一个进行加密,而解密则需要另一个密钥。比如,你向银行请求公钥,银行将公钥发给你,你使用公钥对消息加密,那么只有私钥的持有人--银行才能对你的消息解密。与对称加密不同的是,银行不需要将私钥通过网络发送出去,因此安全性大大提高。

目前最常用的非对称加密算法是RSA算法,是Rivest, Shamir, 和Adleman于1978年发明,他们那时都是在MIT。.NET中也有RSA算法,请看下面的例子:

加密过程:

private byte[] rsaCipherText;

private void mnuAsymmetricEncryption_Click(object sender, RoutedEventArgs e)

{

var rsa = 1;

// Encrypt the data.

var cspParms = new CspParameters(rsa);

cspParms.Flags = CspProviderFlags.UseMachineKeyStore;

cspParms.KeyContainerName = "My Keys";

var algorithm = new RSACryptoServiceProvider(cspParms);

var sourceBytes = new UnicodeEncoding().GetBytes(myData);

rsaCipherText = algorithm.Encrypt(sourceBytes, true);

MessageBox.Show(String.Format("Data: {0}{1}Encrypted and Encoded: {2}",

myData, Environment.NewLine,

Convert.ToBase64String(rsaCipherText)));

}

解密过程:

private void mnuAsymmetricDecryption_Click(object sender, RoutedEventArgs e)

{

if(rsaCipherText==null)

{

MessageBox.Show("Encrypt First!");

return;

}

var rsa = 1;

// decrypt the data.

var cspParms = new CspParameters(rsa);

cspParms.Flags = CspProviderFlags.UseMachineKeyStore;

cspParms.KeyContainerName = "My Keys";

var algorithm = new RSACryptoServiceProvider(cspParms);

var unencrypted = algorithm.Decrypt(rsaCipherText, true);

MessageBox.Show(new UnicodeEncoding().GetString(unencrypted));

}

虽然非对称加密很安全,但是和对称加密比起来,它非常的慢,所以我们还是要用对称加密来传送消息,但对称加密所使用的密钥我们可以通过非对称加密的方式发送出去。为了解释这个过程,请看下面的例子:

(1) Alice需要在银行的网站做一笔交易,她的浏览器首先生成了一个随机数作为对称密钥。

(2) Alice的浏览器向银行的网站请求公钥。

(3) 银行将公钥发送给Alice。

(4) Alice的浏览器使用银行的公钥将自己的对称密钥加密。

(5) Alice的浏览器将加密后的对称密钥发送给银行。

(6) 银行使用私钥解密得到Alice浏览器的对称密钥。

(7) Alice与银行可以使用对称密钥来对沟通的内容进行加密与解密了。

(三)总结

(1) 对称加密加密与解密使用的是同样的密钥,所以速度快,但由于需要将密钥在网络传输,所以安全性不高。

(2) 非对称加密使用了一对密钥,公钥与私钥,所以安全性高,但加密与解密速度慢。

(3) 解决的办法是将对称加密的密钥使用非对称加密的公钥进行加密,然后发送出去,接收方使用私钥进行解密得到对称加密的密钥,然后双方可以使用对称加密来进行沟通。

网上银行安全吗?会不会被黑客黑走钱啊?

1.网上银行为何物?

按目前各家银行开通的网上银行服务系统,一般分为个人网上银行和企业网上银行。无论是个人网上银行或企业网上银行,都是以互联网为媒介,为客户提供金融服务的电子银行产品。各家银行为了把个人客户和企业客户区别开来,故按个人结算账户和企业资金结算账户的清分法,把网上银行服务系统细分为个人客户和企业客户,但实际操作流程及其产生的效果大致相同。

网上银行是信息时代的产物。它的诞生,使原来必须到银行柜台办理业务的客户,通过互联网便可直接进入银行,随意进行账务查询、转账、外汇买卖、银行转账、网上购物、账户挂失等业务,客户真正做到足不出户办妥一切银行业务。网上银行服务系统的开通,对银行和客户来说,都将大大提高工作效率,让资金创造最高效益,从而降低生产经营成本。

作为企业客户,还可通过网上银行,把业务延伸到商贸往来的方方面面。如中行广东省分行的网上银行“中银E点通”,便是针对中行在广东地区的外向型企业特点而开发。该网上银行系统把“企业集团服务系统”和针对外向型企业的“报关即时通”进行整合,使之更具实用性,产生的效果也更加明显。其中“企业集团服务”专门针对集团企业开发,从根本上解决了集团性企业跨地区的账户查询、资金管理和资金汇划问题。

2、网上银行安全吗?

一般来说,只要采取了足够的安全措施,网上银行就是安全的。安全措施是多层次全方位的。例如,为了抵御黑客入侵,可以在网络系统中安装高性能的防火墙和入侵检测系统(IDS)。为了防止不法分子诈骗可以采用强身份鉴别技术。现在使用最多、最普遍的密码或口令措施是一种简单易用的身份识别手段,但是安全性比较低,容易泄露或被攻破。更有效的方法是采用PKI技术设施,其核心就是使用数字证书认证机制。可以这样讲,如果网上银行系统中采用了数字证书认证技术,不法分子即使窃取了卡号和密码,也无法在网上银行交易中实现诈骗。

近期一些不法分子盗用银行公开信箱骗取用户网上银行密码的事件引起了人们的广泛关注。网上银行是否安全?用户应该采取哪些防范措施?带着这些问题,我们来到了由人民银行牵头,各家商业银行联合共建的,专门负责为网上银行提供安全服务的金融行业统一的认证机构——中国金融认证中心(简称CFCA),副总经理曹小青接受了我们的采访。

记者问:我们了解到贵中心主要是为网上银行提供安全服务的,那么您是怎么看待近期发生的这一网上银行不安全事件的呢?

中国金融认证中心副总经理曹小青(以下简称曹小青):这件事不是孤立的事件。例如,去年公安部门曾经破获了这样一起案件,不法分子用黑客手段在银行的网银服务器中植入“木马”程序,窃取了多家银行和证券客户的帐号、密码信息进行诈骗,涉案金额达数十万元;今年2月,美国一名电脑黑客攻破了一家负责代表商家处理Visa和万事达卡交易业务的企业的计算机系统,掌握了220万个顾客的信用卡号;在日本,黑客利用安装在网吧中的特殊软件非法窃取用户网上银行的密码,使1600万日元不翼而飞。这次在国内发生的骗取用户密码的事件,手段并不高明,也还没有造成损失。但是上述案例却给网银用户敲响了警钟:黑客在想方设法骗取用户的密码,大家一定要提高对网络安全的认识和警惕性。

记者问:您认为网上银行安全吗?用户应该采取哪些保护措施呢?

答:只要采取了足够的安全措施,网上银行就是安全的。安全措施是多层次全方位的。例如,为了抵御黑客入侵,可以在网络系统中安装高性能的防火墙和入侵检测系统(IDS)。为了防止不法分子诈骗可以采用强身份鉴别技术。现在使用最多、最普遍的密码或口令措施是一种简单易用的身份识别手段,但是安全性比较低,容易泄露或被攻破。更有效的方法是采用PKI技术设施,其核心就是使用数字证书认证机制。可以这样讲,如果网上银行系统中采用了数字证书认证技术,不法分子即使窃取了卡号和密码,也无法在网上银行交易中实现诈骗。

记者问:您能否具体谈谈数字证书是怎样保证网上银行安全的?

答:数字证书是一种由权威的公信机构发放的、记录着用户和认证机构有关信息的电子文件。网上银行交易双方——银行和用户,都各自持有与其身份绑定的数字证书。在网银交易过程中,双方都要向对方出示证书,以获得相互的信任。这个认证过程是以先进的公钥密码技术为手段,通过相应的计算机程序实现的。每张数字证书都对应着1对或2对密钥——公钥和私钥。公钥在网上公开,私钥则由用户唯一保管。通常,用户的私钥被牢牢地封装在智能卡中,黑客是无法拿到的。

由于私钥的唯一性和不会泄露的特点,使用数字证书认证具有极安全的身份鉴别能力。除此之外,利用私钥和密码技术可以实现数字签名。经过数字签名的交易信息是不可篡改和不可抵赖的。在网上银行交易过程中,数字证书机制在认证过程中还建立了高强度的密码传输连接,以对交易信息加密。

这样,保证了交易信息的真实性、保密性、完整性和不可否认性,当然就极大地保证了网上银行的交易信息安全。从世界范围看,数字证书技术已经被广泛地应用在国内外网上银行系统中,至今尚未发现一例由于数字证书被攻破而使网银诈骗得逞的案件。

记者问:通过您的介绍,我们对网银安全和数字证书机制有了一定的了解。但证书机制具有这么多功能,是不是使用起来很复杂呢?会不会给用户带来不便呢?答:对于这一点,我用“傻瓜”照相机的例子来比照。“傻瓜”相机本身的技术比普通相机复杂,但其自动化程度很高,用户使用更为方便。数字证书也是这样,用户操作起来非常简单,依靠相应的安全代理软件,证书会在后台自动完成身份验证、信息加/解密和数字签名等功能。用户只要经过简单的培训,就完全可以掌握。当然,使用数字证书肯定会比不使用数字证书在速度上要慢一些,但从网上银行的安全考虑,用户不应因为这一点速度上的损失就放弃使用证书。

记者问:用户怎样才能获得数字证书?

答:目前国内已经建立起几十个发放数字证书的权威机构——认证中心。它们各自面对不同的用户群体。中国金融认证中心是由人民银行前头,组织各家商业银行联合共建的为网上金融服务的权威、公正、第三方的证书发放和管理机构。用户要想领到中国金融认证中心的证书,需要先到已经开通这项业务的商业银行网点去办理申请手续,得到审批准许后,即可通过一定的步骤从网上下载证书。具体做法可参看相应的网站信息。

参考资料:

加密解密字符串的算法原理

我们经常需要一种措施来保护我们的数据,防止被一些怀有不良用心的人所看到或者破坏。在信息时代,信息可以帮助团体或个人,使他们受益,同样,信息也可以用来对他们构成威胁,造成破坏。在竞争激烈的大公司中,工业间谍经常会获取对方的情报。因此,在客观上就需要一种强有力的安全措施来保护机密数据不被窃取或篡改。数据加密与解密从宏观上讲是非常简单的,很容易理解。加密与解密的一些方法是非常直接的,很容易掌握,可以很方便的对机密数据进行加密和解密。

一:数据加密方法

在传统上,我们有几种方法来加密数据流。所有这些方法都可以用软件很容易的实现,但是当我们只知道密文的时候,是不容易破译这些加密算法的(当同时有原文和密文时,破译加密算法虽然也不是很容易,但已经是可能的了)。最好的加密算法对系统性能几乎没有影响,并且还可以带来其他内在的优点。例如,大家都知道的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算法的加密算法可在下面的站点找到:

三.一个崭新的多步加密算法

现在又出现了一种新的加密算法,据说是几乎不可能被破译的。这个算法在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之间。这样一个数组是非常有用的,例如:对一个字节对字节的转换表,就可以很容易并且非常可靠的来产生一个短的密钥(经常作为一些随机数的种子)。这样一个表还有其他的用处,比如说:来产生一个随机的字符,计算机游戏中一个物体的随机的位置等等。上面的例子就其本身而言并没有构成一个加密算法,只是加密算法一个组成部分。

作为一个测试,开发了一个应用程序来测试上面所描述的加密算法。程序本身都经过了几次的优化和修改,来提高随机数的真正的随机性和防止会产生一些短的可重复的用于加密的随机数。用这个程序来加密一个文件,破解这个文件可能会需要非常巨大的时间以至于在现实上是不可能的。

四.结论:

由于在现实生活中,我们要确保一些敏感的数据只能被有相应权限的人看到,要确保信息在传输的过程中不会被篡改,截取,这就需要很多的安全系统大量的应用于政府、大公司以及个人系统。数据加密是肯定可以被破解的,但我们所想要的是一个特定时期的安全,也就是说,密文的破解应该是足够的困难,在现实上是不可能的,尤其是短时间内。

电子合同中的数字签名防篡改,有什么原理?

在公钥密码学中,密钥是由公开密钥和私有密钥组成的密钥对。数字签名就是用私有密钥进行加密,接收方用公开密钥进行解密。由于公开密钥不能推算出私有密钥,所以公开密钥不会损坏私有密钥的安全,公开密钥无需保密可以公开传播,而私有密钥必须保密。

因此,当某人用其私有密钥加密信息,能够用TA的公开密钥正确解密就可以肯定该消息是经过某人签字的,因为其他人的公开密钥不可能正确解密该加密信息,其他人也不可能拥有该人的私有密钥而制造出该加密过的信息。

就其实质而言,数字签名是接收方能够向第三方证明接收到的消息及发送源的真实性而采取的一种安全措施,其使用可以保证发送方不能否认和伪造信息。

数字签名的主要方式是:报文的发送方从报文文本中生成一个散列值(或报文摘要),发送方用自己的私有密钥对这个散列值进行加密来形成发送方的数字签名,然后这个数字签名将作为报文的附件和报文一起发送给报文的接收方,报文的接收方首先从接收到的原始报文中计算出散列值(或报文摘要),接着再用发送方的公开密钥来对报文附加的数字签名进行解密,如果两个散列值相同,那么接收方就能确认该数字签名是发送方的。

  • 评论列表:
  •  断渊南简
     发布于 2022-06-28 09:18:01  回复该评论
  • hm.IV = key.GetBytes(16);var sourceBytes = new System.Text.UnicodeEncoding().GetBytes(myData);using (var sourceSt

发表评论:

Powered By

Copyright Your WebSite.Some Rights Reserved.