zoukankan      html  css  js  c++  java
  • win8 数据加密和解密

    在win8中有时候需要对数据进行加密和解密的话,就可以用Windows.Security.Cryptography.DataProtection命名空间下的DataProtectionProvider类。

    DataProtectionProvider当中有两个构造函数:

    View Code
            // 摘要:
            //     用于解密操作的构造函数。
            public DataProtectionProvider();
            //
            // 摘要:
            //     用于加密操作的构造函数。
            //
            // 参数:
            //   protectionDescriptor:
            //     包含用于确定数据要加密的实体的保护描述符。
            public DataProtectionProvider(string protectionDescriptor);

    在加密数据的时候,使用第二个构造函数,即带一个参数的,参数为字符串类型,但是,这个字符串不是乱写的,不信你试试,随便写个字符串进去,加密的时候就会抛出异常。所以,这个参数应取下面这些值。

    View Code
    **************************************************************************** 
    Example Protection Descriptors: 
    
     "SID=S-1-5-21-4392301 AND SID=S-1-5-21-3101812" 
     "SDDL=O:S-1-5-5-0-290724G:SYD:(A;;CCDC;;;S-1-5-5-0-290724)(A;;DC;;;WD)" 
     "LOCAL=user" 
     "LOCAL=machine" 
     "WEBCREDENTIALS=MyPasswordName" 
     "WEBCREDENTIALS=MyPasswordName,myweb.com" 
     
    ****************************************************************************/  

    而对于本地加密,只有两个可以用,其他的都会发生异常,哪两个呢?你猜,看他们的名字,本地使用的嘛,肯定带有“local”字样的,看看,上面的各值,哪些是带“local”的?

    对,就是这两个

    LOCAL=user

    LOCAL=machine

    那么它们有啥区别呢?看它们的值,懂了吗?一个是用户级别的加密,另一个呢?哈,当然是机器级别的。

    我估计是这样的,有兴趣的朋友可以自己做做实验。

    对于user级别,例如,我以用户名“dog”登陆了当前系统,然后我运了程序App,我在App中将文件kill加了密,如果我要将加密后的文件解密还原到kill的内容,当前电脑必须用“dog”的用户登陆才能完成操作。

    而machine级别就好理解了,就是本机,拿到其他电脑上就解不了密,虽然SDK文档没有明地说明,但我估计应该是这样的。

    虽然这种方式不能算是十分安全,但是对于一般数据就足够了。

    接下来说一下我是如何加密的:

    1.将文本框中的内容存入一个文本文件First.txt当中.

            public async static Task<StreamWriter> GetWriteStream(string fileName)
            {
                var storageFile = await ApplicationData.Current.LocalFolder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting); 
                Stream isoFileReadStream = await storageFile.OpenStreamForWriteAsync();
                return new StreamWriter(isoFileReadStream);
            }

    可以看到ApplicationData.Current.LocalFolder此处是获取本地应用程序数据存储区中的根文件夹(这个有读写权限)

    而Package.Current.InstalledLocation只有读权限 它有很多方法,我找的一个是CreateFileAsync它有两个参数,第一个是将要创建的文件名,第二个主要是针对于我将要创建的文件如果存在的话会如何,我此处随便选择了一个是要替换原有的文件,当然具体问题具体分析。

    2.我做了一个简单的文本框,是将文本框中的内容存入到文本文件当中,刚刚已经创建好文本文件了,接下来就是针对刚刚的文件进行写入操作

                using (isoWriteStream)
                {
                    isoWriteStream.WriteLine(txtName.Text);
                }
  • 相关阅读:
    CSU 1333 Funny Car Racing
    FZU 2195 检查站点
    FZU 2193 So Hard
    ZOJ 1655 FZU 1125 Transport Goods
    zoj 2750 Idiomatic Phrases Game
    hdu 1874 畅通工程续
    hdu 2489 Minimal Ratio Tree
    hdu 3398 String
    洛谷 P2158 [SDOI2008]仪仗队 解题报告
    POJ 1958 Strange Towers of Hanoi 解题报告
  • 原文地址:https://www.cnblogs.com/aehyok/p/2922896.html
Copyright © 2011-2022 走看看