【进阶修炼】——改善C#程序质量(7)
113,声明变量时考虑最大值。
Ushort的最大值是65535,用于不同的用途这个变量可能发生溢出,所以设计时应充分了解每个变量的最大值。
114,MD5不再安全。
MD5多用于信息完整性的校验。R=H(S),MD5的算法是不可逆的,也就是我们几乎没有可能根据生产的MD5码去还原原文。但是我们可以使用穷举的办法生成MD5码来对比,由于我们平常设定的密码都比较简单,如:123456,根本不用很长的时间就会被破解掉。为了有效防止破解,一个可行的做法是为我们的密码固定加一个字符串“%¥#……@!&×()”,再进行MD5加密,增加反向穷举的难度,这里假定的是破解者拿到了DB里保存的MD5串,而不是通过用户界面输入密码来穷举。
115,通过Hash值来校验文件是否被篡改。
MD5算法产生的Hash值可以用来校验文件的完整性。虽然多个不同的样本可以得到相同的hash值,但是这种几率不大。
116,避免用非对称算法加密文件。
非对称算法强度较高,算法的执行数度较慢,不适合用来加密文件。可以考虑用对称算法来加密文件。
117,使用SSL确保通信中的数据安全。
关于SSL,即(Secure Socket Layer)的具体信息,可以查阅其他相关的文档。
118,使用SecureString保存计算机中的敏感数据。
String对象在内存中是可见的,并且它不能被显示销毁,只能靠垃圾回收器来销毁。对于一些恶意扫描内存的程序,我们的银行卡密码等信息就容易被泄露。而存入SecureString的字符是经过加密的,并且是存放在非托管内存中的。我们通过.AppendChar方法添加字符。通过IntPtr ptr = Marshal.SecureStringToBSTR(ss); string original = Marshal.PtrToStringBSTR(ptr);得到原始字符串。另外一定要对指针ptr 进行销毁Marshal.ZeroFreeBSTR(ptr)。
119,不要使用自己的加密算法。
算法是不能保密的,通过一些反编译程序或其他的一些手段都能够破解。著名的加密算法如DES等都是公开算法逻辑的,真正需要保密的是密钥。我们自己创建的加密算法没有经过验证,几乎不可能比DES等流行算法还要安全,毕竟我们不是密码学家。
120,为程序集使用强名称。
为程序集签名,可以确保程序集的唯一性,即使有一个和它同名的文件存在,也可以被正常区分,不会造成调用的失效。签名前的程序集WindowsFormsDynamic, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null,签名后WindowsFormsDynamic, Version=1.0.0.0, Culture=neutral, PublicKeyToken=38a587009b65cbfe多了一个唯一的公钥key。我们在使用这个dll的时候必须指定完整的程序集信息,包括公钥key,如反射的时候,才能正常使用。查看本机中已经安装的数字证书,可以用X509Store类得到。
121, 为应用程序设定运行权限。
通过为方法或类添加[PrincipalPermission(SecurityAction.Demand, Role = @"Users")]特性,可以规定只有指定组的用户才能运行程序,否则抛出异常。当然我们还需要启用Windows认证AppDomain.CurrentDomain.SetPrincipalPolicy(System.Security.Principal.PrincipalPolicy.WindowsPrincipal);。我们还可以自定义用户和组:GenericIdentity identity = new GenericIdentity("examUser");GenericPrincipal principal = new GenericPrincipal(identity, new string[] {"Users"});Thread.CurrentPrincipal = principal;可以得到很好的安全控制的灵活性。
【进阶修炼】——改善C#程序质量(7)的更多相关文章
- 【进阶修炼】——改善C#程序质量(1)
这是一个大纲形式的概要,以便自己可以花较少的时间反复阅读.在开发中,多加注意这些有用的建议,让自己成为一个更优秀的程序员.内容主要来自<编写高质量代码-改善C#程序的157个建议>(陆敏技 ...
- 【进阶修炼】——改善C#程序质量(10)
158,不要写冗余注释. 注释应该写代码没有表达的东西. 代码能够自我描述就不要加注释. 159,废弃的注释应该尽早删除. 废弃的注释由于年代太久远,已经和现在的代码逻辑不匹配了,这样的注释只会误导人 ...
- 【进阶修炼】——改善C#程序质量(9)
140,使用默认的访问修饰符. 如果不加访问修饰符,成员变量的默认是private的,类默认是internal的.为了明确访问的权限,我倒是建议都加上访问修饰符,这省不了多少代码. 141,不知道该不 ...
- 【进阶修炼】——改善C#程序质量(8)
122,以<Company>.<Component>作为命名空间. 如Microsoft.Windows.Design.也可以用域名作为空间,如www.microsoft.co ...
- 【进阶修炼】——改善C#程序质量(6)
90,不应为抽象类指定public的构造函数. 抽象类即使指定了public的构造函数,也是不能实例化的,编译通不过.抽象类的构造函数应该设定为protected,它的作用应该是初始化自己的成员,以及 ...
- 【进阶修炼】——改善C#程序质量(5)
71, 区分异步和多线程的应用场景. 计算机的很多硬件,如硬盘,光驱,声卡,网卡都有DMA(Direct Memory Access)功能,它可以不占用cpu的资源,而异步的提出恰恰就是基于这个的.而 ...
- 【进阶修炼】——改善C#程序质量(4)
46, 显示释放资源,需要实现IDisposable接口. 最好按照微软建议的Dispose模式实现.实现了IDisposable接口后,在Using代码块中,垃圾会得到自动清理. 47, 即使提供了 ...
- 【进阶修炼】——改善C#程序质量(3)
32, 总是优先考虑泛型. 泛型代码有很好的重复利用性,和类型安全性. 33, 应尽量避免在泛型类中声明静态成员. 静态成员达不到共享的目的.List<int>和List<Strin ...
- 【进阶修炼】——改善C#程序质量(2)
16, 元素可变的情况下应避免用数组. 数组是定长的集合,可以考虑用ArrayList或List<T>集合.ArrayList元素是object类型,有装箱的开销,性能较低.另外Array ...
随机推荐
- centos7 安装后需要做的事情
安装centos 7 系统之后要做的几件事 #修改主机名 hostnamectl --static set-hostname xd-1 vim /etc/hosts127.0.0.1 xd-1x.x. ...
- SpringBoot+mybatis实现多数据源支持
什么是多数据源支持? 简单的说,就是一个项目里,同时可以访问多个不同的数据库. 实现原理 单个数据源在配置时会绑定一套mybatis配置,多个数据源时,不同的数据源绑定不同的mybatis配置就可以了 ...
- FPGA学习网站
1. OPENCORES.ORG这里提供非常多,非常好的PLD了内核,8051内核就可以在里面找到.进入后,选择project或者由 http//www.opencores.org/browse.c ...
- android Binder的优点
Linux进程间通信的方式: 管道(Pipe) 信号(Signal) 消息队列(Message) 共享内存(Share Memory) 套接字(Socket)中断 Binder Binder 介绍: ...
- 利用Angular.js从PHP读取后台数据
之前已经有非常多方法能够通过angular进行本地数据的读取.曾经的样例中,大多数情况都是将数据存放到模块的$scope变量中,或者直接利用ng-init定义初始化的数据. 可是这些方法都仅仅为了演示 ...
- Android面试、开发之高手 编码规范与细节
凝视 [规则1]必须用 javadoc 来为类生成文档.不仅由于它是标准.这也是被各种java 编译器都认可的方法. [规则2]在文件的開始部分应该有文件的说明信息,应包括例如以下信息: (1)版权信 ...
- unzip:unzip解压文件到指定目录
1.把文件解压到当前目录下 unzip test.zip 2.如果要把文件解压到指定的目录下,需要用到-d参数. unzip -d /temp test.zip 3.解压的时候,有时候不想覆盖已经存在 ...
- pandas数组获取最大值索引的方法-argmax和idxmax
pandas Series 的 argmax 方法和 idxmax 方法用于获取 Series 的最大值的索引值: 举个栗子: 有一个pandas Series,它的索引是国家名,数据是就业率,要找出 ...
- SQL Server 2008 R2:error 26 开启远程连接详解
远程连接sql server 2008 数据库,出现下面的错误: <--在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误. 未找到或无法访问服务器.请验证实例名称是 ...
- Asp.Net发送手机验证码
C#发送手机验证码,平台有很多,我就说说其中的1个平台 测试环境:.net2.0 测试效果:速度还可以,10秒内接收短信 1.去http://www.yuntongxun.com注册,会送8元测试金额 ...