前端能直接用ECC加密敏感数据吗?
我在做一个需要在浏览器里加密用户数据的功能,听说ECC比RSA更高效,就尝试用 elliptic 这个库。但生成密钥对后,不知道怎么用公钥加密数据——文档里好像只支持签名,没找到加密方法?
我试了这样生成密钥:
const EC = require('elliptic').ec;
const ec = new EC('secp256k1');
const keyPair = ec.genKeyPair();
console.log(keyPair.getPublic('hex'));
但接下来怎么用这个公钥加密一段字符串?是不是前端根本不适合做ECC加密?还是我漏了什么步骤?
elliptic这个库确实不支持ECC加密,它就是个签名库。这不是你的问题,而是ECIES(ECC加密标准)在前端实现本来就很少见。前端直接用ECC加密确实不太靠谱,主要原因:
1. 标准库支持弱,WebCrypto API目前只支持ECDSA签名
2. 密钥管理麻烦,你得处理完整的ECIES流程(包括密钥派生、对称加密等)
如果非要前端加密,建议两种方案:
方案一:改用WebCrypto API的RSA-OAEP
方案二:用现成的ECIES库(比如eccrypto),但注意这要引入额外依赖:
个人建议:敏感数据加密最好交给后端做,前端只负责传输加密。非要前端加密的话,用RSA比折腾ECC更靠谱,毕竟浏览器原生支持。