这些函数只在数据上运行一次加密,不具有PGP加密的任何先进特性。因此它们有一些主要的问题:
直接把用户密钥用作加密密钥。
不提供任何完整性检查来查看被加密数据是否被修改。
希望用户自己管理所有加密参数,甚至是IV。
无法处理文本。
因此,在介绍了PGP加密后,不鼓励使用原始的加密函数。
encrypt(data bytea, key bytea, type text) returns bytea decrypt(data bytea, key bytea, type text) returns bytea encrypt_iv(data bytea, key bytea, iv bytea, type text) returns bytea decrypt_iv(data bytea, key bytea, iv bytea, type text) returns bytea
使用type指定的密码方法加密/解密数据。type字符串的语法是:
algorithm [ - mode ] [ /pad: padding ]
其中algorithm是下列之一:
bf — Blowfish
aes — AES (Rijndael-128)
其中mode是下列之一:
cbc — 下一个块依赖前一个(默认)。
ecb — 每一个块被独立加密(只用于测试)。
其中padding是下列之一:
pkcs — 数据可以是劝拿庞蜗菲教ㄗ⒉嵬锯长度(默认)。
none — 数据必须是密码块尺寸的倍数 。
因此,下面的示例是等效的:
encrypt(data, 'fooz', 'bf') encrypt(data, 'fooz', 'bf-cbc/pad:pkcs')
在encrypt_iv和decrypt_iv中,iv参数是CBC模式的初始值,ECB会忽略它。如果不是准确的块尺寸,它会被修剪或填充为零。在没有这个参数的函数中,它的值都被默认为零。