摘要:
建议121:为应用程序设定运行权限在某些情况下,可能存在这样的需求:只有系统管理员才能访问某应用程序的若干功能。这个时候,可以结合.NET中提供的代码访问安全性(Code Access Security)和基于角色(Role-Based Security)的安全性去实现。如果要通过一下的代码正常的访... 阅读全文
摘要:
建议120:为程序集指定强名称虽然强名称在设计之初有防止被未授权的第三方软件非法执行程序的作用,但是因为它的破解方法并不难,所以现在强名称更多的意义在于它可以避免出现“DLL HELL”现象。“DLL HELL”是指多个应用程序可能调用同一个DLL的情况。在应用程序使用过程中,常常会碰到这样一种情况... 阅读全文
摘要:
建议119:不要使用自己的加密算法很多人认为自己写的加密算法才是安全的,因为该算法只有“自己知道”。很遗憾,这是大错特错。首先,我们不是秘密学专家,如果我们随随便便写个算法就称得上是加密算法的话,那么世界上就不会存在“密码学”这个专门的学科了。其次,应当记住的是:让数据安全的不是加密算法本身,而是密... 阅读全文
摘要:
建议118:使用SecureString保存密钥等机密字符串托管代码中的字符串是一类特殊的对象,它们不可用被改变。每次使用System.String类张的方法之一时,或者使用此类型进行运算时(如赋值、拼接等),都要在内存中创建新的字符串对象,也就是为该新对象分配新的空间。这就带来了两个问题:原来的字... 阅读全文
摘要:
建议117:使用SSL确保通信中的数据安全SSL(Secure Socket Layer)最初是由NetScape公司设计的,用于Web安全的网络协议。目前它已经广泛应用到各类网络传输通信中了。SSL利用数字证书技术(非对称加密),保证了通信过程中的唯一性、不可篡改性、不可抵赖性。SSL通道原理图:... 阅读全文
摘要:
建议116:避免用非对称算法加密文件MD5值或者说HASH值是一种不可逆的算法。如果需要从密文还原成明文,那么就需要对称和非对称这两类可逆算法了。对称算法示意图:在对称算法中,首先需要发送方和接收方协定一个密钥K。K可以是一个密钥对,但必须是加密密钥和解密密钥之间能相互推算出来的。在最简单也是最常用... 阅读全文
摘要:
建议115:通过HASH来验证文件是否被篡改MD5算法作为一种最通用的HASH算法,也被广泛用于文件完整性的验证上。文件通过MD5-HASH算法求值,总能得到一个固定长度的MD5值。虽说MD5是一种压缩算法,以致可能存在多个样本空间会得到相同目标字符串的情况,但是这种概率很小。一个1GB的文件,哪怕... 阅读全文
摘要:
建议114:MD5不再安全MD5不再安全不是就算法本身而言的。如果从可逆性的角度出发,MD5值不存在被破解的可能性。MD5被广泛应用于密码验证和消息完整性验证。假设新注册一个用户,当注册用户的密码第一次被存储到数据库时,往往会将其转换为MD5值存储: static string Get... 阅读全文
摘要:
建议113:声明变量前考虑最大值假设正在开发一个工资系统,其中一个模块负责处理加薪。代码如下: static void Main(string[] args) { ushort salary = 65534; salary = ... 阅读全文