1.6 加密解密

1.6.1【必须】不得硬编码密码/密钥

  • 在进行用户登陆,加解密算法等操作时,不得在代码里硬编码密钥或密码,可通过变换算法或者配置等方式设置密码或者密钥。
  1. // bad
  2. const (
  3. user = "dbuser"
  4. password = "s3cretp4ssword"
  5. )
  6. func connect() *sql.DB {
  7. connStr := fmt.Sprintf("postgres://%s:%s@localhost/pqgotest", user, password)
  8. db, err := sql.Open("postgres", connStr)
  9. if err != nil {
  10. return nil
  11. }
  12. return db
  13. }
  14. // bad
  15. var (
  16. commonkey = []byte("0123456789abcdef")
  17. )
  18. func AesEncrypt(plaintext string) (string, error) {
  19. block, err := aes.NewCipher(commonkey)
  20. if err != nil {
  21. return "", err
  22. }
  23. }

1.6.2【必须】密钥存储安全

  • 在使用对称密码算法时,需要保护好加密密钥。当算法涉及敏感、业务数据时,可通过非对称算法协商加密密钥。其他较为不敏感的数据加密,可以通过变换算法等方式保护密钥。

1.6.3【推荐】不使用弱密码算法

  • 在使用加密算法时,不建议使用加密强度较弱的算法。

错误例子:

  1. crypto/descrypto/md5crypto/sha1crypto/rc4等。