刷爆朋友圈的 How-Old 是怎么猜出你年龄的?

人们的朋友圈又被刷屏了,这次走红的是一个名为“how-old.net”黄颜色网站,当用户把个人照片上传后,它就能够测算出照片人物的性别和年龄。 在网站上线几个小时之内,这个系统已经测试了超过 21 万张图片,而在几天之后的现在,究竟有多少人用过它已经很难统计了。有媒体称,在 Facebook 上,搜索 Howoldnet 有超过一百万个结果,在 Twitter 上相关推文的数量也已经接近百万。 这个网站给大家带来了很多乐趣,比如测试结果与拍照的光线、发型、角度、妆容等都或多或少有关系,因此人们总是不断上传一些新的照片,力图让自己在这个网站上能够显得“年轻”一些。甚至有用户调侃说,“我觉得这是最会聊天的工具,因为它通常会帮你减龄。” 原来,这个让很多人着魔的网站来自微软。 就 在上周的微软开发者大会上,微软宣布了Project Oxford,这是一个能够帮助开发人员创建智能应用的REST API与SDK开发包。简单来说,Project Oxford是一系列能够智能解析数据并且能让你应用变得更加“聪明”的服务,它提供的REST API以及SDK,可使开发人员能够利用微软的自然数据解析算法功能,为其解决方案添加智能服务。 现在,微软的提供的API包括以下几个: 脸部API——微软先进的基于云的脸部识别算法,可用来检测和识别图片中的人脸。 视觉API——视觉API是一组先进的图像处理算法,可基于视觉内容返回信息,并生成图像。 语音API——语音API提供最先进的算法处理语音。使用这些API,开发人员可以很容易地为他们的应用添加语音操控功能。在某些情况下,这些API还能够实现实时交互。 智能语言理解服务——智能语言理解服务(LUIS)为向应用中添加语言理解功能提供了一个快速有效的途径。 看到这里,也许你就该明白了。没错,朋友圈疯传的这个识别年龄的黄色框框正是基于Project Oxford所提供的脸部API。 Eason Wang是一位来自必应的高级工程师,他直接参与了这个项目的开发。他表示,坦白来讲这个小小的网站能够获得如此多的关注和广为流传,对他来说是个很大的惊喜。他解答人们都很想知道的问题:how-old.net网站到底是怎么从照片中判断出人们的年龄的。 他 表示,过去几年,在必应的图像搜索中,我们已经建立了一个最佳的图像理解能力,它被应用在必应以及微软其他的一些产品中。现在这个能力开发给了所有的开发 者。为了能够让这种能力能够应用在任意一个应用中,你可以简单地称其为API,并且能够在JSON格式中找到所有的必要信息,你甚至在Microsoft Project Oxford Home这个网页中上传照片。 它在几秒钟之内就能完成数据备份,其中脸部五官的坐标、性别、年龄信息都包括在内。而这个脸部API只是Project Oxford开放许多功能的其中之一,还有许多其他的核心功能的API来授权创新方案,而how-old.net只是其中的一个案例。 how- old.net主要是靠三个技术来完成的,它们分别是人脸检测、性别分类和年龄检测。其中人脸检测是其他两个技术的基础,而年龄检测和性别检测,它们只是 在机器学习的过程中解决了分类的问题。这个涉及到人脸特征的画像、收集可学习的数据,建立一个分类模型以及模型优化。 微软网站上也解释,该软件分析人们脸上的27个点得出结论。这些“地标式”的点是脸部的关键节点,比如瞳孔,眼角或鼻子——它们会随着年龄而发生明显的变化。除了这些关键节点,还有刚刚在上面提到的一些因素也会影响到年龄的测算,比如浓妆会让人显得更老。 现在微软声称该网站目前还处于优化阶段,每张照片的分析结果后面都附带免责声明。最后值得一提的是,how-old.net网站表示它并不会保存你所上传的任何照片。 from:http://www.oschina.net/news/62123/how-old

龙生   07 May 2015
View Details

史上最狡猾恶意软件现身:被发现后会自爆

[摘要]它可以拦截任何输入浏览器窗口中的纯文本,如果在安全检查中被发现,会竭力毁掉计算机。 腾讯科技讯 5月6日,思科安全情报研究团队Talos Group日前宣称,他们发现一种代号为Rombertik的新式恶意软件。它可以拦截任何输入浏览器窗口中的纯文本,并通过垃圾邮件和钓鱼邮件传播。如果在安全检查中被发现,这种恶意软件就会“自爆”,竭力毁掉计算机。 一旦用户通过点击链接下载Rombertik,它会通过多项检测。一旦其启动,并在Windows电脑上运行,就可以查看自己是否被发现。与其他恶意软件不同的是,Rombertik会尝试毁掉计算机。 Talos Group的安全专家本·贝克(Ben Baker)与阿历克斯·邱(Alex Chiu)写道:“这款恶意软件之所以十分独特,是因为一旦其发现与恶意软件分析相关的特定属性后(即可能被发现迹象),它就会积极尝试毁掉计算机。” Rombertik 的首要目标是主引导记录区(MBR),即计算机开机后加载操作系统前访问硬盘时所必须要读取的首个扇区。如果未能成功进入这里,Rombertik就会通 过随机使用RC4密匙加密的方法,迅速毁掉用户主文件夹中的所有文件。而一旦MBR或主文件夹被加密,计算机就会重启。MBR此后会陷入无限循环中,从而 阻止计算机重新启动。屏幕上会显示“Carbon crack attempt, failed”的代码。 研究人员称:“Romberik是一款非常复杂的恶意软件,其设计目的就是侵入用户浏览器阅读凭证和其他敏感信息,以帮助攻击者渗透和控制服务器。” 安全专家们发现,Romberik利用社交工程学手段诱使用户下载、解压缩以及打开附件,最终导致用户妥协。在分析样本时,含有Romberik的邮件似乎来自Windows Corporation。 袭 击者竭力说服用户查看附件,看他们的业务是否符合目标用户所在机构。如果用户下载和解压缩文件,随后就会看到类似缩略图的文件。一旦它被安装到电脑上,就 会自己解压。大约97%的解压文件内容看起来都是合法的,包括75张图片和8000多个实际上没有任何用处的诱饵功能。Talos Group专家称:“如此多的功能超过大多数人的分析能力,根本不可能查看每个功能。” 类似Romberik恶意软件过去曾出现过,比如2013年对韩国目标和去年对索尼娱乐有限公司发动的网络袭击。可是Romberik总是保持活跃状态,将一个字节的数据在内存中写下9亿次,这令追踪工具分析起来非常复杂。 Talos Group专家称:“如果分析工具试图记录所有9.6亿次指令,这些记录会暴增到100千兆以上。”该公司建议用户保持良好的安全习惯,比如确保安装杀毒软件、确保时常更新、不要点击未知发件人发送的附件、确保对电子邮件充分扫描等。 FROM:http://www.oschina.net/news/62193/most-cunning-malware

龙生   07 May 2015
View Details

为新项目添彩的 10+ 超有用 JavaScript 库

JavaScript 库是一种基础地预写入脚本语言,可以减轻基于应用的 JavaScript 开发,比如 AJAX 和其他以 web 为中心的技术。这些 JavaScript 库常常被称作 JavaScript 框架。比较流行的 JavaScript 库比如 Jquery,MooTools, Prototype, Dojo 和 YUI 都可以很好的完成常见的 JavaScript 任务。 这些库的主要用途是编写函数来嵌入或者合并从 HTML 页面和与 DOM 页面的交互。所有的这些框架都有常见的 JavaScript 任务函数,如动画,DOM 操作和 Ajax 处理。JavaScript 编程使得工作更加简单,安全和更加令人振奋。 JavaScript库的特点是能够成为最好的,面向结果的高级特性,如多点触控手势,Js小部件,鼠标捕捉等特性。所以让我们来开一下我们今天列举在 “为新项目添彩的10+超有用JavaScript库”中的所有特性。 Angular.js   AngularJS能够让你编写基于客户端的web应用程序犹如你有个智能的浏览器。它可以让你使用旧HTML(或者HAML,Jada和friends!)作为你的模板语言,而且可以让你拓展HTML的语法来简单清晰的表现应用程序的组件。它能够通过双向数据绑定使用JavaScript对象自动同步来自UI上的数据。为了帮你更好的构建你的应用程序,使其容易测试,AngularJS告诉浏览器如何做依赖注入和控制反转。 React React一个构建用户接口的JavaScript库。 Foundation Foundation 是世界上最先进的响应式前端框架。你可以快速地原型和搭建站点或者app在任何带有Foundation 的设备上工作,包括布局构建(如完全响应式的网格),元素和最佳实践。 Meteor Meteor 是一个搭建现代化 web 应用的极为简单环境。 Three.js 此项目的目标在于创建一个轻量级的低复杂性的 3D 库-- 换句话说,就是仿制品。这个库提供<canvas>,<svg>,CSS3D和WebGL渲染器。 Pdf.js PDF.js 是一个便携式文档格式(PDF)查看器,由 HTML5 构建而成。PDF.js 是社区主导的并且由 Mozilla 实验室支持。我们的目标是创建一个一般用途,基于web标准的平台来解析和渲染 PDF。 Backbone Backbone.js 为 web 应用提供了架构,通过提供模型,带有键值对绑定和自定义事件,具有丰富的枚举函数 API 连接,声明事件处理视图,和通过 RESTful JSON 接口连接所有到已存在的 API。 Select2 Select2是select boxes基于jQuery的替代品。它支持搜索,远程数据集和结果分页。 Leaflet Leaflet是一个专为移动友好交互地图设计的开源JavaScript库。它是由来自拥有一个专用贡献者团队MapBox的Vladimir Agafonkin开发的。只有大概30KB的gzip JS代码,它拥有所有许多开发者曾经为在线地图开发的所有特性。 Ionic Ionic是HTML5开源移动框架,用来构建惊人的跨平台混合带有HTML,JavaScript和CSS的原生app。 Vis.js 一个动态的,基于浏览器可视化的库。这个库被设计成易于使用,来处理大量的动态数据,能够处理交互数据。这个库由数据集,时间线,网络Graph2D和Graph3D等组件构成。 Blast.js Blast.js 分隔文本是为了方便排版操作。它有四个内建定界符:字符,单词,句子和元素。另外,Blast也能够匹配自定义的正则表达式和语法。 […]

龙生   07 May 2015
View Details

300元打造智能影音中心

之前一在玩Arduino 和STM时就也曾想过玩玩上位机的滋味,只是一直也没有找到上位机中真能让我有兴奋点的东东。可能是出于视觉疲劳又或是自己见识太过浅薄,只见各种厂家拿着上位机做得最多也就是路由器和电视盒,而且是各有各渣尽是奇葩。悻然,我们还有小* 这种没节操的公司,敢打着向老乔至敬的口号无耻的抄袭苹果产品,让他们的东东还有点看头。一直认为在上位机上折腾还不如直接买个小*来得直接, 如果不是想拿个服务器到处跑的话,估计在短时间内我是没有什么兴趣碰上位机的。 所谓的上位机说白了就是一台准电脑,没有常规家用机那么庞大,当然也没有那么强大(传统意义)的一台小电脑。一般都能在淘宝上淘到,通常都是祼板。最为响当当的得数树梅派,还有就是国人山寨树莓的香蕉派,还有不伦不类的pcduino,它们的价格在190~340之间。买回来接上线就能跑,懂点装机知识就能动手自己搞。 由于看到了湖北一牛人竟然用90多台树莓搭了一台与服务器般大小的集群服务器,他称之为“树莓林”这倒也挺贴切的。其性能可以赶超IBM普通的企业服务器了,但价格却只有IBM服务器的1/5不到吧。这可真是典型的“好汉架不住人多”,单挑的不行来一群!深感其彪悍,是得给个赞! 受了刺激也想自己动动手,毕竟实践是验证真理的唯标准,总觉得自己对上位机可能存在一某些偏见那倒不如尝试动手一试体验一下。 在网上淘了一下,做了对比树莓虽说是流行,但最新的树莓2配置还是有点低,虽然提供了4个USB但基本上一下子将WIFI,蓝牙,鼠标键盘都接上那就没了。 以下是收集到的几种现行上位机的配置与对比 后来找到了号称超越树莓的香蕉派(真不知道这公司怎么想的,什么名字不好偏偏叫香蕉,估计当时是被雌性荷尔蒙灌了大脑吧),还算不错价格也就在190~210区间,而且他们还有个Pro版本是搭载了WIFI的才230~270,但配置上却实是比树莓上了一个档次,反正是拿来主义管他有没有节操,要买当然支持国人不鸟英国佬了直接入手香蕉破(BananaPro) 这里就提供一些香蕉图: 在价格上来说 Banana Pro 比起 BananaPi 贵了几十块钱,但却多了 WIFI (AP6181) 模块,至少可以省下一个USB口了,板子是纯黑的沉金板看起来也高档不少,当然没人愿意拿板子裸奔吧,那就买个盒子装一装,我喜欢换装所以盒子是自己用3D打印打的。 烧录系统映像 Lemaker 上提供一系列能装香蕉破的操作系统,还是挺齐全的。这里是下载页, 另外如果想看 BananaPro 全英参数的可以上香蕉的官网。 上位机的操作系统是装在SD卡上的,所以建议配一个8G以上的高速TF卡,也就24~36左右的价格区间。 在Windows 下只要下载两个软件,一个是用来格式化SD卡并去除SD卡上的分区表的,另一个是烧录操作系统映像文件的,地址如下: SD Formatter – SD卡格式化工具 Win32 Diskimager – SD卡系统烧录工具 用法不多说了,这个都不会就即时脑补吧。 OSX 值得一说的还是如何在Mac和Ubuntu上烧制系统吧 OSX 下做盘是很轻松的,不用安装任何工具,一切尽在终端内,先用 diskutil 指令查一下SD卡的盘名

我查到的是 disk1 ,然后用 unmountDisk 抹去分区信息,可别抹错了OSX的系统分区可是 disk0 这个不要搞错,否则出什么状况就自己抹脖子吧。

最后,使用 dd 指令

这里要注意的是 if= 后面要紧跟影像文件名称,rdisk1 是我们插入 SD 卡时跟SD卡名自动生成的,如果你挂入的SD卡不是 disk1 那就去磁盘工具查一下就好了。 还有就是 bs=4m 这里的意思是每次写入SD的数据区块的大小,4m就是4兆,如果你是低速卡那就只能悲剧的1m,我是用10m的,反正这个值越大写入的速度就会越高。 写入成功后OSX就不能再读取这个SD卡并且会弹出一个对话框提示将SD推出,那就直接推出SD然后插到香蕉的PP上就能通电试了。 Ubuntu 老实说,下面的这个我没有实践过是从网上收集过来的其实原理是与Mac上是一样的,废话就不多说直接写下指令: sdxx 是SD卡的盘号

然后 dd sudo dd bs=4M if=[path]/[imagename] of=/dev/sdx 这个与OSX 是类似的 我试过安装 Lubuntu 一下就能成功,不用额外配置 WIFI,只是连一下就行了。性能上就将就着用吧,毕竟是lite版本,肯定是阉割了不少东西的能成移动服务器就行了总不能要求这么小的家伙能面面俱到。如果安装的是Raspbian那么就得手工加载 WIFI驱动: […]

龙生   07 May 2015
View Details

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
1 291 292 293 412