Best Practice

90 次浏览

NIST 及 NSA 对于加密和摘要算法的要求

NIST 和 NSA 对于项目中使用的消息摘要、加密等算法和对应的密钥长度都有一定的要求,在此进行整理,可以作为标杆对照进行参考。

NIST 标准:NIST.SP.800-131Ar2_Transitioning the Use of Cryptographic Algorithms and Key Lengths 中规定:

AES 128、192、256 均允许
RSA ≥ 2048-bits
ECC ≥ 224-bits
SHA ≥ family 2
MAC 则不允许使用 Key < 112-bits 的实现,且应使用 SHA 算法
DES/3DES 应在 2023 年前完全禁用
MD5 和 SHA-1 禁用

NSA 的规定则是更胜一筹
NSA Cryptographic Algorithms Requires

相关参考

132 次浏览

OAuth 2.0 Implicit Grant Flow “隐式授权流” 不再被推荐!

Apple Safari 已经提供默认启用的隐私保护功能,称为智能跟踪保护 (ITP)。 ITP 会阻止“第三方”的 Cookie – 包含在跨域请求中的 Cookie。
常见的用户跟踪形式是:在后台将一个 iframe 加载到第三方站点,并使用 Cookie 在整个 Internet 中关联用户。【遗憾的是,此模式也是单页应用 (SPA) 中实现Oauth 2.0 的隐式流(Implicit Grant Flow)的标准方式】

当浏览器阻止第三方 Cookie 以阻止用户跟踪时,SPA 也会中断。【并非只有 Safari】通过阻止第三方 Cookie 来增强用户隐私保护。Brave 默认已阻止第三方 Cookie,而 Chromium(基于 Google Chrome 和 Microsoft Edge 的平台)也已宣布,在 2023 年年底停止支持第三方 Cookie。

因为上述的从浏览器中删除第三方 Cookie 的行为,隐式授权流不再是合适的身份验证方法。 如果没有第三方 Cookie,隐式流的无提示 SSO 功能将不起作用,导致应用程序在尝试获取新令牌时中断。 强烈建议你让所有新的应用程序都使用 【授权代码流(Authorization Code Flow)】,并让现有的单页应用也开始迁移到授权代码流。

这对于所有基于 SPA 开发并包含联合认证登录方式的网站,【都会产生重大影响】,需要你对项目进行重大重构和修改。

相关参考

Apple Safari 已经启用此限制,Chromium 将在 2023 年底前启用。这是一个类似于“微软将会从 Windows 中移除 IE” 一个级别的信息,请大家务必注意。

1,349 次浏览

最佳实践:根据条件获取集合的部分结果

很多场景下,我们需要根据一个条件判定某一集合中是否存在从中选取部分符合条件的元素用于后续操作。我们有很多方式可以实现这种需求,比如 纯手工对集合进行遍历,yield return,Any(),Count() 或 Count 属性,那么,这些实现方式对效率的影响如何?哪种实现效率较优呢?

我们来做一次实验。

首先我们定义一个类,并初始化包含有 1 万个该类型实例的集合。

    public class Item
    {
        public Guid Id { get; set; }
        public string Name { get; set; }
        public bool Gender { get; set; }
        public int Age { get; set; }
        public DateTime Birthday { get; set; }
        public string Address { get; set; }
        public string Email { get; set; }
    }

Continue reading

1,892 次浏览

C#: 字符串连接 (+=) 与 StringBuilder 效率分析

在 C# 或 Java 中,我们可以使用诸如 StringBuilder, StringBuffer 等方式对大量字符串进行拼接操作。当然,我们也可以直接使用 字符串连接 (+=) 的方式进行拼接操作。但是,两种主要方式在效率上有何区别呢?我们是否需要针对这两类方式进行区别场景的使用呢?针对于此,我做了如下测试,以证明两种不同方式连接字符串的效率临界值。(关于Java中StringBuilder和StringBuffer的区别,可以参阅这篇文章

测试方法是:重复连接字符串 “Hello World!” 1次到40次,在每次连接的过程中都分别采用 String Connection (+=) 和 StringBuilder 的 Append()方法进行1000次,并分别计算出两种方法在这1000次运算过程中的获胜比率。通过多次试验,得到如下统计:

第一次:
StringBuilder Efficiency Test 1
Continue reading

953 次浏览

(转载) 程序员都应遵守的 11 条规则

转载地址:http://www.oschina.net/translate/11-rules-all-programmers
原文地址:http://dotnet.dzone.com/articles/11-rules-all-programmers

我是一个倾向于生活在规则下的人。
现在,这些规则大部分是我本人为自己设立的-但它们依然是规则。
我发现为自己创建规则可以让我过得更好,因为这样做可以提前决定一些事情,而不是要在匆忙中做出所有的决定。
我今天早上应该去健身房吗?
我的规则告诉我说我要在周三前往健身房,今天是周三,因此我要去健身房,就这么办了!
这周,当我正在思考那些对我施加有影响的规则时,我想到了去制定一系列软件开发者都应该遵守的规则,我认为这可能是一个好主意。
Continue reading