设为首页 收藏本站
查看: 983|回复: 0

[经验分享] Windows phone应用开发[16]-数据加密

[复制链接]

尚未签到

发表于 2018-6-27 10:33:20 | 显示全部楼层 |阅读模式
  关于Windows Phone 中加密算法使用.最近一段时间很多做Windows Phone应用同学在微博上提了不少问题.其实在客户端实际需求中大多都会涉及到数据基于加密算法的解析和加密.本篇幅针对Windows Phone数据加密算法的问题.给出一些解决方案.
  首先有必要来说说为何会存在Windows Phone数据加密的问题.做过Silverlight的同学应该知道.在Silverlight 4版本 .NET类库中基于System.Security.Cryptography命名空间下.保留了Aes加密算法.关于数据DES和TripleDES[3DES]加密算法已经不存在了.同样在Windows Phone SDK 7.1.1最新版本中.也能够看出除了SHA1和HMAC_SHA1对称算法外.如果我们尝试做MD5或对称的HMAC_MD5加密操作发现官方的SDK并没有提供类似支持的类. 如是问题就这么出现了.
  如果需要在服务器端和和客户端传递类似MD5、HMAC_MD5或是解析服务器端传递的DES、TripleDES[3DES]数据是发现现在Windows Phone针对数据加密和解析并没有对应的支持.其实这些问题.原来都在我们团队实际Coding过程都碰到过.也算是找到一些比较成熟的解决方案.如下.
  本篇幅针对MD5,HMAC_MD5,DES,TripleDES[3DES]算法给出Windows Phone移植版本.
  首先来说说MD5.
  MD5[Message Digest Algorithm MD5]用于确保信息传输完整一致,在计算机广泛使用的杂凑算法之一[又译摘要算法、哈希算法].比较常见使用于保证数据完整性.MD5或者说HASH值是一种不可逆的算法.在.NET 4中也提供类似在System.Security.Cryptography.MD5命名空间下MD5CryptoServiceProvider 类的对应实现.针对Silverlight和WP对应版本不支持MD5的情况,微软官方在archive.msdn上给出对应的MD5 Silverlight移植版本.[同样使用于Windows Phone]:
  Silverlight MD5 Implementation:
  [http://archive.msdn.microsoft.com/SilverlightMD5]
  具体实现Code也可以参考GitHub上地址.这里不再赘述.
DSC0000.png

  HMAC_MD5.
  使用 MD5 哈希函数计算基于哈希值的消息验证代码 [HMAC].
  HMACMD5 是从 MD5 哈希函数构造的一种键控哈希算法,被用作基于哈希的消息验证代码 [HMAC].此 HMAC 进程将密钥与消息数据混合,使用哈希函数对混合结果进行哈希计算,将所得哈希值与该密钥混合,然后再次应用哈希函数。输出的哈希值长度为 128 位.
  关于HMAC_MD5算法除了在Codeplex 上[http://hmacmd5.codeplex.com/] 找到HMACmd5 Codeplex已经在Windows Phone验证通过外:
  HMACMD5 For Silverlight/Windows Phone:
  http://hmacmd5.codeplex.com/
  其他第三方方式均没有验证过.考虑该算法核心并不复杂.于是自己动手重写一个基于Windows Phone 版本HMACMD5的实现[验证通过]. 核心类如下:
1:  ?using System;   2:  using System.Net;   3:  using System.Windows;   4:  using System.Windows.Controls;   5:  using System.Windows.Documents;   6:  using System.Windows.Ink;   7:  using System.Windows.Input;   8:  using System.Windows.Media;   9:  using System.Windows.Media.Animation;  10:  using System.Windows.Shapes;  11:     12:  namespace DataEncryptBuildDemo.DataEncryptCommon  13:  {  14:      /// <summary>  15:      /// HMACMD Data Encrypt Operator  16:      /// Author:chenkai Data:6/7/2011  17:      /// </summary>  18:      public>.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, &quot;Courier New&quot;, courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;100%;margin: 0em;}.csharpcode .lnum { color: #606060; }  具体代码也可以从HMACMD5 For Windows Phone  GitHub上可以查看.如上代码验证通过.
DSC0001.png

  TripleDES[3DES]
  Triple DES又称3DES,是DES加密算法的一种模式.[TDEA,Triple Data Encryption Algorithm]块密码的通称。它相当于是对每个数据块应用三次DES加密算法.现在计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解;3DES即是设计用来提供一种相对简单的方法,即通过增加DES的密钥长度来避免类似的***,而不是设计一种全新的块密码算法.
  一开始我大概看了DES 算法在C下面的实现很简单.费了点时间很快就移植Windows Phone DES算法版本. DES算法的核心采用位运算的. 每次8个字节也就是64位内容.密钥key也为64位.然后经过16轮置换. 可惜 TripleDES[3DES]始终没有移植成功.重复造轮子无果后.果断寻求第三方解决方案.
  在Silverlight和Windows Phone 在CodePlex值得推荐开源第三方库是SSH.NET Library
  SSH.NET Library:
  http://sshnet.codeplex.com/
  SSH.NET Library库移植灵感是来源于Java版本.不过SSH。NET是完全基于.NET 没有采用任何第三方组件和引用. 其中实现也包含同步和异步的封装. Socket通信库. HTTP代等.其中最为重要的是基于.NET 实现DES和TripleDES[3DES] 两种核心算法. 并且支持.NET 3.5 、Silverlight、Windows Phone.
  当然除了Codeplex上这个比较成熟SSH.NET Library开源组件外.关于DES和TripleDES[3DES] 还可以找到其他类似可选的开源组件.针对Windows Phone 缺乏3DES支持.国外一个WP 开发者Nicolas Humann[Link in] 基于broccoliproducts 的DES, TripleDES and BlowFish in Silverlight 版本库做了进一步的集成和封装. 并成功移植DES和TripleDES[3DES]Windows phone版本:
  Nicolas Humann[Link in]  DES And TripleDES[3DES] Component:
  TripleDES Cryptography On Silverlight And Windows Phone
  针对Nicolas Humann[Link in] 这个3DES版本移植ku.在其基础做了进一步的封装.为了是实现对TripleDESCryptoServiceProvider 类[3DES核心实现类]对数据加密和解密的操作. 大概分为两种情况.一种是需要IV密钥Key 另外一种不需要密钥Key 数据基于3DES和DES 加密和解密的封装. 核心Code如下:
1:  using System;   2:  using System.Net;   3:  using System.Windows;   4:  using System.Windows.Controls;   5:  using System.Windows.Documents;   6:  using System.Windows.Ink;   7:  using System.Windows.Input;   8:  using System.Windows.Media;   9:  using System.Windows.Media.Animation;  10:  using System.Windows.Shapes;  11:     12:  using System.Text;  13:  using System.Security.Cryptography;  14:  using DataEncryptBuildDemo.DataEncryptCommon.DESDataEncrypt;  15:     16:  namespace DataEncryptBuildDemo.DataEncryptCommon  17:  {  18:      /// &lt;summary>  19:      /// Des And TripleDES DataEncrypt Operator  20:      /// Author:chenkai Date:14/5 2012  21:      /// </summary>  22:      public>  当然这个只是Nicolas Humann[Link in] 对3DEs Windows Phone版本进一步封装. 目的方便能够形成一套API.无需关心TripleDESCryptoServiceProvider 类具体如何实现.至于这段代码可以GitHub上找到.验证通过.
DSC0002.png

  至此关于应用开发常见的MD5、MAC_MD5、DES、3DES Windows Phone移植版本算法可用库如上.如上代码均实际项目中验证通过.对于还在苦苦重复造轮子同学.如果觉得为了使用效率.还是值得参考的.
  关于本片全部源码可以GitHub下载到[ https://github.com/chenkai/DataEncryptWindowsPhoneDemo ].如有Bug请即时反馈 Email:chenkaiHome@live.cn
  或通过Sina 微博:[http://weibo.com/chenkaihome] 即时沟通.
  参考链接:
  TripleDES Cryptography On Silverlight And Windows Phone
  DES, TripleDES and BlowFish in Silverlight

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-531274-1-1.html 上篇帖子: Windows Phone 项目实战之我的微盘(上) 下篇帖子: GitLab for windows
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表