Skip to content

密码学与安全函数 ​

Sprig 提供了一些高级密码学功能。

sha1sum ​

sha1sum 函数接收一个字符串,并计算其 SHA1 摘要。

sha1sum "Hello world!"

sha256sum ​

sha256sum 函数接收一个字符串,并计算其 SHA256 摘要。

sha256sum "Hello world!"

以上内容将以 “ASCII Armored” 格式计算 SHA256 摘要,可安全打印。

adler32sum ​

adler32sum 函数接收一个字符串,并计算其 Adler-32 校验和。

adler32sum "Hello world!"

bcrypt ​

bcrypt 函数接收一个字符串,并生成其 bcrypt 哈希值。

bcrypt "myPassword"

htpasswd ​

htpasswd 函数接受 username 和 password,并生成密码的 bcrypt 哈希值。结果可用于 Apache HTTP Server 上的基本认证。

htpasswd "myUser" "myPassword"

注意,在模板中直接存储密码是不安全的。

randBytes ​

randBytes 函数接受一个计数 N 并生成一个密码学安全(使用 crypto/rand)的长度为 N 的随机字节序列。该序列以 base64 编码的字符串形式返回。

randBytes 24

derivePassword ​

derivePassword 函数可用于根据某些共享的“主密码”约束派生特定密码。此算法已明确定义。

derivePassword 1 "long" "password" "user" "example.com"

注意,将部分直接存储在模板中被视为不安全。

genPrivateKey ​

genPrivateKey 函数生成一个以 PEM 块形式编码的新私钥。

它使用以下值之一作为第一个参数:

  • ecdsa:生成椭圆曲线 DSA 密钥(P256)
  • dsa:生成 DSA 密钥(L2048N256)
  • rsa:生成 RSA 4096 密钥
  • ed25519:生成 Ed25519 密钥

buildCustomCert ​

buildCustomCert 函数允许自定义证书。

它接受以下字符串参数:

  • base64 编码的 PEM 格式证书
  • base64 编码的 PEM 格式私钥

它返回具有以下属性的证书对象:

  • Cert:PEM 编码的证书
  • Key:PEM 编码的私钥

示例:

$ca := buildCustomCert "base64-encoded-ca-crt" "base64-encoded-ca-key"

请注意,返回的对象可以传递给 genSignedCert 函数,以使用此 CA 签署证书。

genCA ​

genCA 函数使用 2048 位 RSA 私钥生成一个新的自签名 x509 证书颁发机构。

它接受以下参数:

  • 主体的通用名称(cn)
  • 证书有效期(以天为单位)

它返回具有以下属性的对象:

  • Cert:PEM 编码的证书
  • Key:PEM 编码的私钥

示例:

$ca := genCA "foo-ca" 365

请注意,返回的对象可以传递给 genSignedCert 函数,以使用此 CA 签署证书。

genCAWithKey ​

genCAWithKey 函数使用给定的私钥生成一个新的自签名 x509 证书颁发机构。

它接受以下参数:

  • 主体的通用名称(cn)
  • 证书有效期(以天为单位)
  • 私钥(PEM 编码);不支持 DSA 密钥

它返回具有以下属性的对象:

  • Cert:PEM 编码的证书
  • Key:PEM 编码的私钥

示例:

$ca := genCAWithKey "foo-ca" 365 (genPrivateKey "rsa")

请注意,返回的对象可以传递给 genSignedCert 函数,以使用此 CA 签署证书。

genSelfSignedCert ​

genSelfSignedCert 函数使用 2048 位 RSA 私钥生成一个新的自签名 x509 证书。

它接受以下参数:

  • 主体的通用名称(cn)
  • 可选的 IP 列表;可以为 nil
  • 可选的替代 DNS 名称列表;可以为 nil
  • 证书有效期(以天为单位)

它返回具有以下属性的对象:

  • Cert:PEM 编码的证书
  • Key:PEM 编码的私钥

示例:

$cert := genSelfSignedCert "foo.com" (list "10.0.0.1" "10.0.0.2") (list "bar.com" "bat.com") 365

genSelfSignedCertWithKey ​

genSelfSignedCertWithKey 函数使用给定的私钥生成一个新的自签名 x509 证书。

它接受以下参数:

  • 主体的通用名称(cn)
  • 可选的 IP 列表;可以为 nil
  • 可选的替代 DNS 名称列表;可以为 nil
  • 证书有效期(以天为单位)
  • 私钥(PEM 编码);不支持 DSA 密钥

它返回具有以下属性的对象:

  • Cert:PEM 编码的证书
  • Key:PEM 编码的私钥

示例:

$cert := genSelfSignedCertWithKey "foo.com" (list "10.0.0.1" "10.0.0.2") (list "bar.com" "bat.com") 365 (genPrivateKey "ecdsa")

genSignedCert ​

genSignedCert 函数使用指定的 CA 的 2048 位 RSA 私钥生成一个新的 x509 证书。

它接受以下参数:

  • 主体的通用名称(cn)
  • 可选的 IP 列表;可以为 nil
  • 可选的替代 DNS 名称列表;可以为 nil
  • 证书有效期(以天为单位)
  • CA(参见 genCA)

示例:

$ca := genCA "foo-ca" 365
$cert := genSignedCert "foo.com" (list "10.0.0.1" "10.0.0.2") (list "bar.com" "bat.com") 365 $ca

genSignedCertWithKey ​

genSignedCertWithKey 函数使用指定的 CA 和给定的私钥生成一个新的 x509 证书。

它接受以下参数:

  • 主体的通用名称(cn)
  • 可选的 IP 列表;可以为 nil
  • 可选的替代 DNS 名称列表;可以为 nil
  • 证书有效期(以天为单位)
  • CA(参见 genCA)
  • 私钥(PEM 编码);不支持 DSA 密钥

示例:

$ca := genCA "foo-ca" 365
$cert := genSignedCert "foo.com" (list "10.0.0.1" "10.0.0.2") (list "bar.com" "bat.com") 365 $ca (genPrivateKey "ed25519")

encryptAES ​

encryptAES 函数使用 AES-256 CBC 加密文本,并返回一个 base64 编码的字符串。

encryptAES "secretkey" "plaintext"

decryptAES ​

decryptAES 函数接收一个由 AES-256 CBC 算法编码的 base64 字符串,并返回解码后的文本。

"30tEfhuJSVRhpG97XCuWgz2okj7L8vQ1s6V9zVUPeDQ=" | decryptAES "secretkey"