Javascript和PostgreSQL之间的加密/解密
我正在尝试在javascript和postgresql之间进行加密/解密 我用这个: 加密文本的算法,然后在PostgreSQL中使用PGCRYPTO.decrypt_iv对文本进行解密 从上面返回的加密字符串:“fc9a03cbc8a57d4061570575f197c29c:a319a4bf354516f392ba96a895478af6” 我必须去掉冒号才能取出一些东西…所以这个:Javascript和PostgreSQL之间的加密/解密,javascript,postgresql,encryption,Javascript,Postgresql,Encryption,我正在尝试在javascript和postgresql之间进行加密/解密 我用这个: 加密文本的算法,然后在PostgreSQL中使用PGCRYPTO.decrypt_iv对文本进行解密 从上面返回的加密字符串:“fc9a03cbc8a57d4061570575f197c29c:a319a4bf354516f392ba96a895478af6” 我必须去掉冒号才能取出一些东西…所以这个: select decrypt_iv(decode('fc9a03cbc8a57d4061570575f
select decrypt_iv(decode('fc9a03cbc8a57d4061570575f197c29ca319a4bf354516f392ba96a895478af6','hex')::bytea, 'sKCx49VgtHZ59bJOTLcU0Gr06ogUnDJi'::bytea,
'null'::bytea, 'aes-cbc/pad:pkcs');
给我这个:这是物理的
粗体文本是原始字符串
键后的参数,第三个参数,可以是任何字符串。这只是改变了输出的第一部分,垃圾部分
在decrypt_iv中,我尝试在用于加密的javascript中使用加密算法名称,但这毫无用处
我看不出我在这里遗漏了什么。简而言之。在Javascript中,使用CryptoJS库并执行以下操作:
import CryptoJS from 'crypto-js';
const key = CryptoJS.enc.Hex.parse('12345678901234567890123456789012');
var iv = CryptoJS.enc.Hex.parse('12341234123412341234123412341234');
function encrypt(text) {
let encrypted = CryptoJS.AES.encrypt(text, key, { iv });
return encrypted.ciphertext.toString(CryptoJS.enc.Base64);
}
const text = JSON.stringify({ a: 1, b: 2, c: [{}, {}] });
const encrypted = encrypt(text) // --> BDg4dXSvNbWAOeZY/8XQpr6fQMZqnnhQwv8REep4LvQ=
在Postgres中,转到:
选择convert\u from(
extensions.decrypt_iv(
解码('BDg4dXSvNbWAOeZY/8XQpr6fQMZqnnhQwv8REep4LvQ=','base64')::bytea,--加密文本
解码('123456789012134567890123456789012','hex')::bytea,-key
解码('12341234112341234112341234412341234','hex')::bytea,--iv
“aes”
),
“utf8”
)-->{“a”:1,“b”:2,“c”:[{},{}]}
我看到它在某处提到,为了增加安全性,应该在javascript中使用pgp,在Postgres中使用pgp_sym_decrypt。如果我有更多的时间,我会更新这个答案