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

Windows 8 系列(四):Win8 RSA加密相关问题

[复制链接]

尚未签到

发表于 2015-5-20 12:30:26 | 显示全部楼层 |阅读模式
  最近好久没有发win8系列的文章了,这段时间工作中积累了一些经验和问题,现在拿出来跟大家分享一下。
  
  关于RSA加密算法,在Win8中用起来不太方便。不像其他平台一样导入证书文件或者导入N值、E值,而是需要导入ASC码数据。据说windows phone中也一样,需要把密钥中的信息解析成ASC码,组成数组,用AsymmetricKeyAlgorithmProvider.ImportPublicKey()方法才能导入。相关代码如下:(nBytes就是ASC码数据,类型为byte[])
DSC0000.png
  
  
  在Windows Phone中,直接导入由密钥产生的数组就可以,但是Win8上总是提示失败,编译不过,提示ASN1 bad tag value met.。如下图:
DSC0001.png
  
  
  由于目前Win8和相关参考资料较少,还没有多少开发者真正的遇到过这些问题,所以,我的同事只能从一些其他平台的RSA数据包的例子中参考,经过近一天时间的查找,终于在一次测试中通过了,解决办法是在原密钥ASC码数组的前面加入了“82, 83, 65, 49, 0, 4, 0, 0, 3, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,”这一段ASC码值,将这一串ASC码转换成字符后是
DSC0002.png
  这个相当于是一个信息头。
  面对无资料可循的问题,我们能够解决这个问题,实属不易,如果没有遇到那个例子,不知道何时才能解决这个问题。这个问题虽然暂时解决了,但是我们并没有找到解决这个问题的根本办法,如果这个问题以后再次出现,我们就不知道还得“试”到什么时候
  
  担心的事情终究是发生了,在安装了最新发布的Win8系统升级包后,这里报错了。起初我们还以为是API变化导致的,可是我们看了API文档后没有找到相关可以解决的办法,最后我们求助了微软,想知道是系统的问题,还是API的问题,还是我们自己的问题。
  我们再次在这个问题上花费了将近两天的时间,终于在 @马蔬菜(新浪微博)的帮助下,我们走入了正途,他发现API中有个CreateKeyPair方法,可以创建指定长度的Key,于是,我们用这个方法同时创建了两个Key,对比他们的相同之处,把它们加入到我们的密钥数组中,不就OK了吗?
  
  于是我们用了以下代码:



1             CryptographicKey keyPair = Algorithm.CreateKeyPair(1024);
2             CryptographicKey keyPair2 = Algorithm.CreateKeyPair(1024);
3             var blobOfPublicKey = keyPair.ExportPublicKey();
4             var blobOfPublicKey2 = keyPair2.ExportPublicKey();
5             byte[] newBuffer, newBuffer2;
6             CryptographicBuffer.CopyToByteArray(blobOfPublicKey, out newBuffer);
7             CryptographicBuffer.CopyToByteArray(blobOfPublicKey2, out newBuffer2);
  这里需要说明一下,为什么我们创建了1024的,而不是其他的长度呢,我们发现我们的密钥在转换成IBuffer对象后的长度是128,1024的key转换成IBuffer后是162,最接近128,因此应该是会有38位的“头”和“尾”。
  查看newBuffer和newBuffer2的差异后,我们发现头和尾分别有部分数组元素是一样的,我们把它们加入到我们的密钥数组中,再次运行ImportPublicKey()方法,执行通过。至此,我们的RSA加密问题终于解决了,而且是彻底解决了,如果以后这里再报错,就可以还拿上面这段代码比较相同的部分,得出“头”和“尾”。
  
  以上是我们工作中遇到的问题和相关的解决方案,希望能够帮助到大家。

运维网声明 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-68905-1-1.html 上篇帖子: Win8中GridVIew千变万化——绑定分组数据 下篇帖子: Win8远程Win8[你的凭据不工作]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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