《编写高质量C#的建议》学习笔记 第九部分 安全性设计
声明变量前考虑最大值。
例如:
ushort salary = 65534;
(ushort)(salary + 1); // 65535
(ushort)(salary + 2); // 0
如果要避免类似错误,有一个补救措施:为运算加上checked关键字。在运算溢出的时候会抛出异常,而不是让程序继续下去。
ushort salary = 65534;
checked
{
salary = (ushort)(salary + 1); // 65535
salary = (ushort)(salary + 1); // 算数运算导致溢出
}
MD5不再安全,MD5算法本身不可逆,但可以通过穷举法,对一些简单常用的密码进行穷举破解。可以先设计一个足够复杂的密码hashKey,然后将它的MD5值和用户输入密码的MD5值相加,再求一次MD5值作为返回值。改进后的方法,密码长度够了,复杂的也够了,想要通过穷举法来得到真正的密码值其成本也就大大增加了。