一切福田,不離方寸,從心而覓,感無不通。

Windows下的Linux开发环境 Cygwin

Cygwin是许多自由软件的集合,最初由Cygnus Solutions开发,用于各种版本的Microsoft Windows上,运行UNIX类系统。Cygwin的主要目的是通过重新编译,将POSIX系统(例如Linux、BSD,以及其他Unix系统)上的软件移植到Windows上。Cygwin移植工作在Windows NT、Windows 2000、Windows XP以及Windows Server 2003上比较好,在Windows 95和Windows 98上,相对差劲一些。目前Cygwin由Red Hat等负责维护。 Cygwin包括了一套库,该库在Win32系统下实现了POSIX系统调用的API;还有一套GNU开发工具集(比如GCC、GDB),这样可以进行简单的软件开发;还有一些UNIX系统下的常见程序。2001年,新增了X Window System。 另外还有一个名为MinGW的库,可以跟Windows本地的MSVCRT库(Windows API)一起工作。MinGW占用内存、硬盘空间都比较少,能够链接到任意软件,但它对POSIX规范的实现没有Cygwin库完备。 但糟糕的是,Cygwin不支持Unicode。实际上,除了当前Windows系统以及OEM codepages(例如,一个俄语用户,他的codepages是CP1251和CP866,而不能是KOI8-R、ISO/IEC 8859-5、UTF-8等),Cygwin对其他字符集都不支持。 Red Hat规定,Cygwin库遵守GNU General Public License,但也可以跟符合开源定义的自由软件链接。Red Hat另有价格不菲的许可协议,这样使用Cygwin库的专属软件,就可以进行再发布。 授权协议: GPL 开发语言: C/C++ 操作系统: Windows 收录时间: 2008年10月30日 软件首页 软件文档 软件下载 from:http://www.oschina.net/p/cygwin

龙生   21 Apr 2015
View Details

Linux 容器引擎 Docker

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架或包装系统。 授权协议: Apache 开发语言: Google Go 查看源码» 操作系统: Linux 收录时间: 2013年07月19日 软件首页 软件文档 软件下载 from:http://www.oschina.net/p/docker

龙生   21 Apr 2015
View Details

用RSA加密实现Web登录密码加密传输

通常我们做一个Web应用程序的时候都需要登录,登录就要输入用户名和登录密码,并且,用户名和登录密码都是明文传输的,这样就有可能在中途被别人拦截,尤其是在网吧等场合。 这里顺带一个小插曲,我以前有家公司,办公室装修时候安排的网口相对较少,不太够用,于是我和另外一个同事使用了一个hub来共享一个网口,这就导致了很有趣的现象:任何他的网络包我都能抓得到,当然了,我的他也能抓得到。这是不是有很大的安全隐患了?我有可能在不经意间会泄漏自己的密码。 所以,很多安全要求较高的网站都不会明文传输密码,它们会使用https来确保传输过程的安全,https是用证书来实现的,证书来自于证书颁发机构,当然了,你也可以自己造一张证书,但这样别人访问你的网站的时候还是会遇到麻烦,因为你自己造的证书不在用户浏览器的信任范围之内,你还得在用户浏览器上安装你的证书,来让用户浏览器相信你的网站,很多用户并不知道如何操作,就算会操作,也能也不乐意干;另一种选择是你向权威证书颁发机构申请一张证书,但这样有一定的门槛,还需要付费,也不是我们乐意干的事。 所以,我打算自己实现一个密码加密传输方法。 这里使用了RSA非对称加密算法,对称加密也许大家都已经很熟悉,也就是加密和解密用的都是同样的密钥,没有密钥,就无法解密,这是对称加密。而非对称加密算法中,加密所用的密钥和解密所用的密钥是不相同的:你使用我的公钥加密,我使用我的私钥来解密;如果你不使用我的公钥加密,那我无法解密;如果我没有私钥,我也没法解密。 我设计的这个登录密码加密传输方法的原理图如下:   首先,先演练一下非对称加密:

大家可以清楚看到,密码被加密成128字节长度的密文,为什么是固定128字节呢?这是因为我们的RSACryptoServiceProvider默认生成的key的长度是1024,即1024位的加密,所以不管你要加密的密码有多长,它生成的密文的长度肯定是128字节,也因为这样,密码的长度是有限制的,1024位的RSA算法,只能加密大约100个字节长度的明文,要提高可加密的明文的长度限制,就得增加key的长度,比如把key改到2048位,这样能加密的明文的长度限制也就变为大概200出头这样……还是太少啊!而且这样会带来加密速度的显著下降,RSA本来就很慢……是的,比同没有长度限制的对称加密,这种非对称加密的限制可真多,即便是200个字符,又能传输什么东西呢?——密码!这个就够了,传输完密码之后,我们就使用对称加密,所以,RSA往往是用来“协商”一个对称加密的key的。 接下去,真正的难点在于用javascript实现一个和.net的RSA兼容的算法。密码学,对我来说真像天书一般,每次我一看就头大,这个工作是没办法自己做的了,只能到网上找,那是相当的费力啊,找到许多js的RSA实现,但都和.net的这套东西不兼容,最后还是功夫不负有心人,终于找到了一套。不多说,上代码:

这是客户端代码,大家可以看到,基本没有什么服务器端代码,<%=postbackUserName%>用于回显输入的用户名,<%=LoginResult%>用于显示登录结果,<%=strPublicKeyExponent%>和<%=strPublicKeyModulus%>则用来告诉客户端RSA公钥。需要的javascript文件说明: jQuery.md5.js –  用于对密码进行两次md5加密;(我通常在数据库中保存的用户密码是两次MD5后的结果) BigInt.js – 用于生成一个大整型;(这是RSA算法的需要) RSA.js – RSA的主要算法; Barrett.js – RSA算法所需要用到的一个支持文件; 对于密码学,我几乎一无所知,所以没办法跟大家解释清楚RSA算法的原理,抱歉,我只知道怎么用。关于javascript中这行代码:“setMaxDigits(129);”具体表示什么我也不清楚,我只知道,把参数改为小于129的数之后会导致客户端的javascript执行进入死循环。服务器端代码也很简单:

用户名“user1” 密码“123456” 登录成功! 抓取http报文看看POST的“密码”: 这样的“密码”的破解就成为了理论上的可行了。:) 下面提供完整代码下载(使用VS2010开发环境):RSALoginTest 我根据博主的例子整理的:RsaDemo   from:http://www.cnblogs.com/AloneSword/archive/2013/09/18/3329359.html

龙生   18 Apr 2015
View Details

关于使用JS前台加密、JAVA后台解密的RSA实现,RSA加密和签名

需求环境: 西安项目中,客户要求保护用户的密码信息,不允许在http中传递明文的密码信息。   实现: 用RSA非对称加密方式实现。后台生成rsa密钥对,然后在登陆页面设置rsa公钥,提交时用公钥加密密码,生成的密文传到后台,用私钥解密,获取密码明文。 这样客户端只需要知道rsa加密方式和公钥,前台不知道私钥是无法解密的,此解决方案还是相对比较安全的。 附件是参照网友资料的java+JS的实现,放在这里供大家下载。访问方式/RSA/login.jsp。 需要到http://www.bouncycastle.org下载bcprov-jdk14-123.jar文件。 因为后台要转换成bigint,所以对明文长度有些限制: 总长度不超过126(1汉字长度为9),如下两个字符串: 阿送大法散得阿送大法散得阿送 1232132131231231232131232K1232132131231231232131232K1232132131231231232131232K1232132131231231232131232K1234567890123456789012     RSA速度 * 由于进行的都是大数计算,使得RSA最快的情况也比DES慢上100倍,无论 是软件还是硬件实现。 * 速度一直是RSA的缺陷。一般来说只用于少量数据 加密。     Util.java   Java代码 package RSA; /**  *   */ import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.math.BigInteger; import java.security.KeyFactory; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.NoSuchAlgorithmException; import java.security.PrivateKey; import java.security.PublicKey; import java.security.SecureRandom; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; import java.security.spec.InvalidKeySpecException; import java.security.spec.RSAPrivateKeySpec; import java.security.spec.RSAPublicKeySpec; import javax.crypto.Cipher; /**  * RSA 工具类。提供加密,解密,生成密钥对等方法。  * 需要到http://www.bouncycastle.org下载bcprov-jdk14-123.jar。  *   */ public class RSAUtil {     private static String RSAKeyStore = "C:/RSAKey.txt";     /**      * * 生成密钥对 *      *       * @return KeyPair *      * @throws EncryptException      */     public static KeyPair generateKeyPair() throws Exception {         try {             KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA",                     new org.bouncycastle.jce.provider.BouncyCastleProvider());             final int KEY_SIZE = 1024;// 没什么好说的了,这个值关系到块加密的大小,可以更改,但是不要太大,否则效率会低             keyPairGen.initialize(KEY_SIZE, new SecureRandom());             KeyPair keyPair = keyPairGen.generateKeyPair();             System.out.println(keyPair.getPrivate());             System.out.println(keyPair.getPublic());             saveKeyPair(keyPair);             return keyPair;         } catch (Exception e) {             throw new Exception(e.getMessage());         }     }     public static KeyPair getKeyPair() throws Exception {         FileInputStream fis = new FileInputStream(RSAKeyStore);         ObjectInputStream oos = new ObjectInputStream(fis);         KeyPair kp = (KeyPair) oos.readObject();         oos.close();         fis.close();         return kp;     }     public static void saveKeyPair(KeyPair kp) throws Exception {         FileOutputStream fos = new FileOutputStream(RSAKeyStore);         ObjectOutputStream oos = new ObjectOutputStream(fos); […]

龙生   18 Apr 2015
View Details

非对称加密算法

非对称加密算法是一种密钥的保密方法。 非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。 非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将其中的一把作为公用密钥向其它方公开;得到该公用密钥的乙方使用该密钥对机密信息进行加密后再发送给甲方;甲方再用自己保存的另一把专用密钥对加密后的信息进行解密。 另一方面,甲方可以使用乙方的公钥对机密信息进行签名后再发送给乙方;乙方再用自己的私匙对数据进行验签。[1] 甲方只能用其专用密钥解密由其公用密钥加密后的任何信息。 非对称加密算法的保密性比较好,它消除了最终用户交换密钥的需要。 非对称密码体制的特点:算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。对称密码体制中只有一种密钥,并且是非公开的,如果要解密就得让对方知道密钥。所以保证其安全性就是保证密钥的安全,而非对称密钥体制有两种密钥,其中一个是公开的,这样就可以不需要像对称密码那样传输对方的密钥了。这样安全性就大了很多。 起源 W.Diffie和M.Hellman 1976年在IEEE Trans.on Information刊物上发表了“ New Direction in Cryptography”文章,提出了“非对称密码体制即公开密钥密码体制”的概念,开创了密码学研究的新方向 2工作原理 1.A要向B发送信息,A和B都要产生一对用于加密 非对称加密算法 和解密的公钥和私钥。 2.A的私钥保密,A的公钥告诉B;B的私钥保密,B的公钥告诉A。 3.A要给B发送信息时,A用B的公钥加密信息,因为A知道B的公钥。 4.A将这个消息发给B(已经用B的公钥加密消息)。 5.B收到这个消息后,B用自己的私钥解密A的消息。其他所有收到这个报文的人都无法解密,因为只有B才有B的私钥。 3主要应用 非对称加密(公钥加密):指加密和解密使用不同密钥的加密算法,也称为公私钥加密。假设两个用户要加密交换数据,双方交换公钥,使用时一方用对方的公钥加密,另一方即可用自己的私钥解密。如果企业中有n个用户,企业需要生成n对密钥,并分发n个公钥。由于公钥是可以公开的,用户只要保管好自己的私钥即可,因此加密密钥的分发将变得 十分简单。同时,由于每个用户的私钥是唯一的,其他用户除了可以通过信息发送者的公钥来验证信息的来源是否真实,还可以确保发送者无法否认曾发送过该信息。非对称加密的缺点是加解密速度要远远慢于对称加密,在某些极端情况下,甚至能比对称加密慢上1000倍。 DSACryptoServiceProvider 非对称加密算法 RSACryptoServiceProvider //加密 UnicodeEncoding encoding = new UnicodeEncoding(); byte[] PasswordBytes = encoding.GetBytes(password);//将密码转换为字节数组RSACryptoServiceProvider crypt=new RSACryptoServiceProvider();//RSA加密算法,非对称PasswordBytes=crypt.Encrypt(password ,false);//加密字节数组,这是加密后的密码值,放入数据库中的表字段中。 string key=crypt.ToXmlString(true);//输出密钥为XML格式的字符串,且包含私钥,这个字符串要作为数据库表中的一个字段同用户的密码放在一起。 //解密 RSACryptoServiceProvider crypt=new RSACryptoServiceProvider();//已随机生成了一个密钥对 crypt.Clear();//毁掉当前密钥对 crypt.FromXmlString(key)//输入密钥对,key是从数据库表字段中读取的那个XML格式的字符串,即密钥字段PasswordBytes=crypt.Decrypt(password ,false);//解密字节数组,返回原始密码给用户 上面方法的一个特点是每个用户对应一个密钥(包含公钥和私钥),它们都是随机生成的,所以各不相同。不过缺点也是很明显的,就是密钥存储在数据库中,如果数据库被攻破密钥就泄漏了。 还有另外一个方法就是依照上面方法随机生成一个密钥对(包含公钥和私钥),通过ToXmlString(true)方法导出,然后把这个XML字符串格式的密钥放到你的Web程序的Web.config文件的AppSetting节点里面,然后通过FromXmlString(key)方法读入密钥,这样就意味着所有的用户密码都用同一个密钥对加密和解密。 4主要功能 非对称加密体系不要求通信双方事先传递密钥或有任何约定就能完成保密通信,并且密钥管理方便,可实现防止假冒和抵赖,因此,更适合网络通信中的保密通信要求。 5主要算法 RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)。 使用最广泛的是RSA算法,Elgamal是另一种常用的非对称加密算法。 Elgamal由Taher Elgamal于1985年发明,其基础是DiffieˉHellman密钥交换算法,后者使通信双方能通过公开通信来推导出只有他们知道的秘密密钥值[DiffieˉHellman]。DiffieˉHellman是Whitfield Diffie和Martin Hellman于1976年发明的,被视为第一种 非对称加密算法,DiffieˉHellman 与RSA的不同之处在于,DiffieˉHellman不是加密算法,它只是生成可用作对称密钥的秘密数值。在DiffieˉHellman密钥交换过程中,发送方和接收方分别生成一个秘密的随机数,并根据随机数推导出公开值,然后,双方再交换公开值。DiffieˉHellman算法的基础是具备生成共享密钥的能力。只要交换了公开值,双方就能使用自己的私有数和对方的公开值来生成对称密钥,称为共享密钥,对双方来说,该对称密钥是相同的,可以用于使用对称加密算法加密数据。 与RSA相比,DiffieˉHellman的优势之一是每次交换密钥时都使用一组新值,而使用RSA算法时,如果攻击者获得了私钥,那么他不仅能解密之前截获的消息,还能解密之后的所有消息。然而,RSA可以通过认证(如使用X.509数字证书)来防止中间人攻击,但Diff ieˉHellman在应对中间人攻击时非常脆弱。 6算法区别 非对称加密算法与对称加密算法的区别 首先,用于消息解密的密钥值与用于消息加密的密钥值不同; 其次,非对称加密算法比对称加密算法慢数千倍,但在保护通信安全方面,非对称加密算法却具有对称密码难以企及的优势。 为说明这种优势,使用对称加密算法的例子来强调: Alice使用密钥K加密消息并将其发送给Bob,Bob收到加密的消息后,使用密钥K对其解密以恢复原始消息。这里存在一个问题,即Alice如何将用于加密消息的密钥值发送给 Bob?答案是,Alice发送密钥值给Bob时必须通过独立的安全通信信道(即没人能监听到该信道中的通信)。 这种使用独立安全信道来交换对称加密算法密钥的需求会带来更多问题: 首先,有独立的安全信道,但是安全信道的带宽有限,不能直接用它发送原始消息。 其次,Alice和Bob不能确定他们的密钥值可以保持多久而不泄露(即不被其他人知道)以及何时交换新的密钥值 当然,这些问题不只Alice会遇到,Bob和其他每个人都会遇到,他们都需要交换密钥并处理这些密钥管理问题(事实上,X9.17是一项DES密钥管理ANSI标准[ANSIX9.17])。如果Alice要给数百人发送消息,那么事情将更麻烦,她必须使用不同的密钥值来加密每条消息。例如,要给 非对称加密算法 200个人发送通知,Alice需要加密消息200次,对每个接收方加密一次消息。显然,在这种情况下,使用对称加密算法来进行安全通信的开销相当大。 非对称加密算法的主要优势就是使用两个而不是一个密钥值:一个密钥值用来加密消息,另一个密钥值用来解密消息。这两个密钥值在同一个过程中生成,称为密钥对。用来加密消息的密钥称为公钥,用来解密消息的密钥称为私钥。用公钥加密的消息只能用与之对应的私钥来解密,私钥除了持有者外无人知道,而公钥却可通过非安全管道来发送或在目录中发布。 Alice需要通过电子邮件给Bob发送一个机密文档。首先,Bob使用电子邮件将自己的公钥发送给Alice。然后Alice用Bob的公钥对文档加密并通过电子邮件将加密消息发送给Bob。由于任何用Bob 的公钥加密的消息只能用Bob的私钥解密,因此即使窥探者知道Bob的公钥,消息也仍是安全的。Bob在收到加密消息后,用自己的私钥进行解密从而恢复原始文档。 from:http://baike.baidu.com/view/1490349.htm

龙生   18 Apr 2015
View Details

对称加密算法

对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发信方将明文(原始数据)和加密密钥(mi yao)一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。 简介 对称加密(也叫私钥加密)指加密和解密使用相同密钥的加密算法。有时又叫传统密码算法,就是加密密钥能够从解密密钥中推算出来,同时解密密钥也可以从加密密钥中推算出来。而在大多数的对称算法中,加密密钥和解密密钥是相同的,所以也称这种加密算法为秘密密钥算法或单密钥算法。它要求发送方和接收方在安全通信之前,商定一个密钥。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都可以对他们发送或接收的消息解密,所以密钥的保密性对通信性至关重要。 2特点 对称加密算法的特点是算法公开、计算量小、加密速度快、加密效率高。 不足之处是,交易双方都使用同样钥匙,安全性得不到保证。此外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的惟一钥匙,这会使得发收信双方所拥有的钥匙数量呈几何级数增长,密钥管理成为用户的负担。对称加密算法在分布式网络系统上使用较为困难,主要是因为密钥管理困难,使用成本较高。而与公开密钥加密算法比起来,对称加密算法能够提供加密和认证却缺乏了签名功能,使得使用范围有所缩小。在计算机专网系统中广泛使用的对称加密算法有DES和IDEA等。美国国家标准局倡导的AES即将作为新标准取代DES。 3具体算法 DES算法,3DES算法,TDEA算法,Blowfish算法,RC5算法,IDEA算法。 4原理应用 对称加密算法的优点在于加解密的高速度和使用长密钥时的难破解性。假设两个用户需要使用对称加密方法加密然后交换数据,则用户最少需要2个密钥并交换使用,如果企业内用户有n个,则整个企业共需要n×(n-1) 个密钥,密钥的生成和分发将成为企业信息部门的恶梦。对称加密算法的安全性取决于加密密钥的保存情况,但要求企业中每一个持有密钥的人都保守秘密是不可能的,他们通常会有意无意的把密钥泄漏出去——如果一个用户使用的密钥被入侵者所获得,入侵者便可以读取该用户密钥加密的所有文档,如果整个企业共用一个加密密钥,那整个企业文档的保密性便无从谈起。DESCryptoServiceProvider RC2CryptoServiceProvider RijndaelManaged TripleDESCryptoServiceProvider //例加密文本文件(RijndaelManaged ) byte[] key = { 24, 55, 102,24, 98, 26, 67, 29, 84, 19, 37, 118, 104, 85, 121, 27, 93, 86, 24, 55, 102, 24,98, 26, 67, 29, 9, 2, 49, 69, 73, 92 }; byte[] IV ={ 22, 56, 82, 77, 84, 31, 74, 24,55, 102, 24, 98, 26, 67, 29, 99 }; RijndaelManaged myRijndael = new RijndaelManaged(); FileStream fsOut = File.Open(strOutName, FileMode.Create,FileAccess.Write);//strOutName文件名及路径 FileStream fsIn = File.Open(strPath, FileMode.Open,FileAccess.Read); CryptoStream csDecrypt=new […]

龙生   18 Apr 2015
View Details

不对称加密算法

不对称加密算法使用两把完全不同但又是完全匹配的一对钥匙—公钥和私钥。在使用不对称加密算法加密文件时,只有使用匹配的一对公钥和私钥,才能完成对明文的加密和解密过程。 加密原理 加密明文时采用公钥加密,解密密文时使用私钥才能完成,而且发信方(加密者)知道收信方的公钥,只有收信方(解密者)才是唯一知道自己私钥的人。不对称加密算法的基本原理是,如果发信方想发送只有收信方才能解读的加密信息,发信方必须首先知道收信方的公钥,然后利用收信方的公钥来加密原文;收信方收到加密密文后,使用自己的私钥才能解密密文。显然,采用不对称加密算法,收发信双方在通信之前,收信方必须将自己早已随机生成的公钥送给发信方,而自己保留私钥。由于不对称算法拥有两个密钥,因而特别适用于分布式系统中的数据加密。广泛应用的不对称加密算法有RSA算法和美国国家标准局提出的DSA。以不对称加密算法为基础的加密技术应用非常广泛。 2与对称加密的比较 与对称加密算法的不同 与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私 有 密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加 密,只有用对应的私有密钥才能解密;因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。 非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将其中的一把作为公用密钥向其它方公开;得到该公用密钥的乙方使用该密钥对机密信息进行加密后再发送给甲方;甲方再用自己保存的另一把专用密钥对加密后的信息进行解密。甲方只能用其专用密钥解密由其公用密钥加密后的任何信息。 非对称加密算法的保密性比较好,它消除了最终用户交换密钥的需要,但加密和解密花费时间长、速度慢,它不适合于对文件加密而只适用于对少量数据进行加密。 经典的非对称加密算法如RSA算法等安全性都相当高 对称加密 对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发信方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。对称加密算法的特点是算法公开、计算量小、加密速度快、加密效率高。不足之处是,交易双方都使用同样钥匙,安全性得不到保证。此外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的惟一钥匙,这会使得发收信双方所拥有的钥匙数量成几何级数增长,密钥管理成为用户的负担。对称加密算法在分布式网络系统上使用较为困难,主要是因为密钥管理困难,使用成本较高。在计算机专网系统中广泛使用的对称加密算法有DES、IDEA和AES。 DES 传统的DES由于只有56位的密钥,因此已经不适应当今分布式开放网络对数据加密安全性的要求。1997年RSA数据安全公司发起了一项“DES挑战赛”的活动,志愿者四次分别用四个月、41天、56个小时和22个小时破解了其用56位密钥DES算法加密的密文。即DES加密算法在计算机速度提升后的今天被认为是不安全的。 AES AES是美国联邦政府采用的商业及政府数据加密标准,预计将在未来几十年里代替DES在各个领域中得到广泛应用。AES提供128位密钥,因此,128位AES的加密强度是56位DES加密强度的1021倍还多。假设可以制造一部可以在1秒内破解DES密码的机器,那么使用这台机器破解一个128位AES密码需要大约149亿万年的时间。(更深一步比较而言,宇宙一般被认为存在了还不到200亿年)因此可以预计,美国国家标准局倡导的AES即将作为新标准取代DES。 from:http://baike.baidu.com/view/7595.htm

龙生   18 Apr 2015
View Details

System.Security.Cryptography 命名空间

System.Security.Cryptography 命名空间提供加密服务,包括安全的数据编码和解码,以及许多其他操作,例如散列法、随机数字生成和消息身份验证。 有关更多信息,请参见加密服务。 类 类 说明 Aes 表示高级加密标准 (AES) 的所有实现都必须从中继承的抽象基类。 AesCryptoServiceProvider 使用高级加密标准 (AES) 算法的加密应用程序编程接口 (CAPI) 实现来执行对称加密和解密。 AesManaged 提供高级加密标准 (AES) 对称算法的托管实现。 AsnEncodedData 表示 Abstract Syntax Notation One (ASN.1) 编码数据。 AsnEncodedDataCollection 表示 AsnEncodedData 对象的集合。 此类不能被继承。 AsnEncodedDataEnumerator 提供在 AsnEncodedDataCollection 对象中导航的能力。 此类不能被继承。 AsymmetricAlgorithm 表示所有非对称算法的实现都必须从中继承的抽象基类。 AsymmetricKeyExchangeDeformatter 表示所有非对称密钥交换反格式化程序均从中派生的基类。 AsymmetricKeyExchangeFormatter 表示所有非对称密钥交换格式化程序均从中派生的基类。 AsymmetricSignatureDeformatter 表示所有不对称签名反格式化程序实现均从中派生的抽象基类。 AsymmetricSignatureFormatter 表示所有不对称签名格式化程序实现均从中派生的基类。 CngAlgorithm 封装加密算法的名称。 CngAlgorithmGroup 封装加密算法组的名称。 CngKey 定义与下一代加密技术 (CNG) 对象一起使用的密钥的核心功能。 CngKeyBlobFormat 指定与 Microsoft 下一代加密技术 (CNG) 对象一起使用的密钥 BLOB 格式。 CngKeyCreationParameters 包含密钥创建的高级属性。 CngPropertyCollection 提供下一代加密技术 (CNG) 属性的强类型集合。 CngProvider 封装与下一代加密技术 (CNG) 对象一起使用的密钥存储提供程序 (KSP) 的名称。 CngUIPolicy 为用户界面 (UI) 封装可选配置参数,当您访问受保护的密钥时,下一代加密技术 (CNG) 将显示这些配置参数。 CryptoAPITransform 执行数据的加密转换。 此类不能被继承。 CryptoConfig 访问加密配置信息。 CryptographicAttributeObject […]

龙生   18 Apr 2015
View Details

AES(Rijndael)算法的 JavaScript 源代码

下面的内容来自 Rijndael in JavaScript。 下面的代码是 Rijndael 算法的 JavaScript 实现。它可以在 IE4+、NS4+ 以及任何兼容 ECMAScript 第一版的浏览器中运行。这个实现没有进行优化,也就是说它不适合处理大量的数据(比如多于几 KB)和需要高速运行的应用程序中。 下载: rijndael.js /* rijndael.js      Rijndael Reference Implementation    Copyright (c) 2001 Fritz Schneider This software is provided as-is, without express or implied warranty. Permission to use, copy, modify, distribute or sell this software, with or without fee, for any purpose and by any individual or organization, is hereby granted, provided that the above copyright notice and this paragraph appear in all copies. Distribution as a part of an application or binary must […]

龙生   18 Apr 2015
View Details

微软到底从 Android 上捞了多少好处?

微软长期以来依靠自己的大批专利数向Android手机厂商收取巨额的专利费已经不是什么秘密了。早在2011年就有消息称微软当时和三星谈判谋求 签订一份让三星每出货一部Android手机就向微软支付15美元专利费的协议,三星方面则期望通过加深和微软Windows Phone平台的合作以换取将该费用降低至10美元每台的结果。从中我们可以看到微软和三星之间的博弈,其中涉及到很多商业问题。 在2014年10月份披露的一份诉讼文件显示微软每年从从Android和Chrome OS上所获取的专利授权收入非常惊人,仅三星一家公司,2013年就向微软支付了高达10亿美元的专利授权费用。而除了最大且最成功的Android厂 家,还有数十家公司向微软支付了Android专利使用费。要知道微软设备娱乐部门(包括Xbox、Windows Phone、以及Skype)在2013年的利润仅仅为8.48亿美元,三星一家在2013年交给微软的专利费就超过了这个数字。 不仅仅是三星,微软和HTC,摩托罗拉等公司也有有类似的交易,每出售一台Android设备需要向微软缴纳一定的专利费。不仅手机厂商,甚至像 Barnes & Noble这样专营电子书业务的公司生产搭载 Android 系统的电子书阅读器也需要向微软支付专利费。 为何手机厂商用Android却要付给微软专利费? 我们都知道Android是基于Linux的自由及开放源代码的操作系统,而早在Android没有单身之前微软就已经在Linux系统上获取专利授权费用了。所以微软拿Android系统开刀也是再正常不过的事情。 2007年Android还没正式与世人见面,微软在当年就宣称Linux侵犯了自己的 235 项专利,但是微软没有正式公布和表明Linux那些地方侵犯了自己的专利。微软的一贯策略是直接和那些应用Linux技术的公司谈判,签署专利授权协议。 包Amazon、Novell、Linspire、TurboLinux在内的多家大公司都已经和微软签有专利授权协议,以保护公司和用户的利益。也有一 些在自己设备中利用到Linux内核的厂商,在受到微软的威逼之后直接选择从设备种移除相关功能,比如TomTom。 还有一个有趣段子是这样的:上个世纪80年代当时的巨头IBM曾经向Sun Microsystems(目前已经被甲骨文收购)索取专利费用,声称Sun侵犯了IBM的7项专利并要求支付赔偿。但是经过Sun的认真核查发现涉案的 7件专利后发现其中6件很可能是无效的,而且 Sun 很明显也没有侵犯 IBM 所提到的第7件专利。但是结果很出人意料,IBM方面宣称也许你们真的没有侵犯我们刚刚提到的那7件专利,但是我们在美国有1万件专利,你难道真的想让我们空手回去再查查看你们是不是侵犯了我们的其他专利吗? 最后经过一番博弈,Sun Microsystems最后还是向IBM支付了数额不菲的“专利保护费”。而IBM则继续去其他公司收保护费去了。而谷歌的Android现在就面临着微软给出的一个类似的难题。这保护费你交定是不交? Android设备到底侵犯了微软的什么专利? 当然也有不愿意交的,比如摩托罗拉。因此微软不得不把一些专利内容向法院上呈。 1、专利号5579517,长文件名支持。第 5 版之前的 MS-DOS 仅支持 11 个字符的文件名(包括扩展名在内),所以微软发明了一种同时支持长文件名和短文件名的方法。使用过 DOS 操作系统的朋友应该知道,超过11个字符的文件名DOS会自动缩短,并用~符号替代一部分,这个专利就是关于这个实现的。由于 Android 系统支持 FAT 格式的 MicroSD (TF) 卡,所以在卡上存储的数据必然要支持 DOS 长文件名,换句话说,任何一个支持 FAT 格式的设备,都受到微软此专利的限制。 2、专利号6621746,闪存擦除。监视闪存的使用状况,在适当的时候进行有针对性的擦除操作。严格的说来,任何一个基于 Flash 的文件系统必然要实现类似的功能,Android 自然也不例外。 3、专利号6909910,联系人的创建和更新。具体为从通话记录中更新某个联系人或创建新联系人的系统和方法。如下图,这个估计很多智能手机都逃不过:微软有关联系人新建和更新的专利。 4、专利号7644376,系统状态监视和通知系统。主要是关于允许移动应用获取手机状态变化的 API,管理全局系统状态通知。 5、专利号5664133,弹出式上下文菜单系统。具体专利描述为对用户选择的对象获取并展示一系列命令在一个弹出菜单中。这专利估计是微软的屠龙刀,神挡杀神,佛挡杀佛。当初苹果引入右键菜单的时候,微软没有起诉是因为微软和苹果签署有专利交叉使用互不起诉的协议。 6、专利号6578054,增量同步。用来同步服务器和客户端里多个数据副本的系统和方法,通过此方法某一个数据副本的增量变化将会被识别,传输,整合到其他所有数据副本上。按照这个专利描述,Android的数据同步功能可以说全军覆没。 7、专利号6370566,从移动设备发起计划会议请求。专利里描述的实现方式和Google Calendar并不相同,所以不太明白这个和Android哪里冲突了。 可以看出以上微软所列出的专利其实都是一些普遍应用在智能手机操作系统甚至是桌面操作系统上的基础性功能,在一些功能上用户已经非常习惯于这种操作 方式和逻辑,如果要绕口这些专利意味着要退出当前的显示界面,重新制造一个用户和开发者都陌生的新环境,这对计算机行业来说其实是一种悲哀。 谷歌如何才能用Android赚更多的钱? 前面说到微软在Android手机生产商手里收取了巨额的专利费。那么谷歌呢,身为 Android 平台的拥有者谷歌在Android平台上又获得了多少利益呢? 首先我们要明确Android系统它不像微软的Windows系统和苹果的iOS系统,当PC和手机制造商使用Windows系统应用到自己的电脑和手机及平板电脑上时微软是要收取授权费的。而苹果虽然不出售自己的系统,但是 iOS 除了苹果本身以外谁也别想用。 Android系统本身就是一个开放式的系统。任何生产商,不管是手机,电脑还是家电厂商将 Android 系统预装到硬件设备上,谷歌实际上未收取任何费用。谷歌的策略是尽可能的把Android系统渗透到更多的消费人群当中,这些人会通过谷歌的搜索,然后点 击谷歌搜索的广告,(这一点上说谷歌在中国基本是一毛钱也捞不到)谷歌从而收益。但 Android 在广告上并没有给谷歌带来非常可观的收入。 有一组数据:谷歌2014年移动搜索业务营收为118亿美元,其中75%的营收(89亿美元)来自使用iPhone和iPad的网站搜索。这意味 着,谷歌2014年在Android设备上的搜索业务营收仅有30亿美元。与谷歌2014年的660亿美元收入相比,30亿美元似乎显得微不足道。另外一 个数字可能领谷歌更加汗颜,仅2014年第四季度,Facebook的移动广告营收就超过26.5亿美元。 谷歌自己创造出来的东西却让别人赚了大钱,谷歌或许是时候更多的想想如何利用这数十亿的Android设备来为自己创造更多的价值。 出处:威锋网 from:http://www.oschina.net/news/61425/microsoft-get-profit-from-android

龙生   18 Apr 2015
View Details
1 2 7