如何在Angular的Typescript中移除公钥字符串首尾的特定标记文本
Angular+TypeScript 公钥首尾标记移除实现方案
直接通过正则匹配即可实现指定首尾文本移除,同时兼容两种常见的公钥开头格式,自动过滤用户输入时可能携带的前后空白、换行符:
步骤1:编写公钥格式化工具方法
// 可放在公共工具类或者加密服务内部使用 private formatPublicKey(rawKey: string): string { return rawKey // 匹配移除两种公钥开头标记+前后空白/换行 .replace(/^\s*-----(BEGIN (RSA )?PUBLIC KEY)-----\s*/g, '') // 匹配移除公钥结尾标记+前后空白/换行 .replace(/\s*-----END PUBLIC KEY-----\s*$/g, '') // 可选配置:移除密钥内容中间的所有换行/空格,若你的加密库支持带换行的密钥可删除这行 .replace(/\s+/g, ''); }
步骤2:集成到现有代码
任选以下两种集成方式之一即可:
方式1:在加密服务的set方法中处理(推荐,一次修改全局生效)
修改你现有加密服务的set方法如下:
public set(data, publicKey){ // 新增公钥格式化逻辑 const formattedKey = this.formatPublicKey(publicKey); let encrypt = new JsEncryptModule.JSEncrypt(); encrypt.setPublicKey(formattedKey); return encrypt.encrypt(data); }
方式2:在调用加密方法时处理
在传参前先对用户输入的公钥做格式化:
this.encryptService.init().then(() => { const rawSecretKey = this.encryptDataForm.get("secretKey").value; // 新增公钥格式化逻辑 const formattedKey = rawSecretKey.replace(/^\s*-----(BEGIN (RSA )?PUBLIC KEY)-----\s*|\s*-----END PUBLIC KEY-----\s*$/g, '').replace(/\s+/g, ''); let result = this.encryptService.set( this.encryptDataForm.get("textToEncrypt").value, formattedKey ); })
效果验证
输入带标记的公钥示例:
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAx8u73Z9nKt8QeRzY7aG9vXb2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6A7B8C9D0E1F2G3H4I5J6K7L8M9N0O1P2Q3R4S5T6U7V8W9X0Y1Z2
-----END PUBLIC KEY-----
处理后输出纯密钥内容:MIIBCgKCAQEAx8u73Z9nKt8QeRzY7aG9vXb2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6A7B8C9D0E1F2G3H4I5J6K7L8M9N0O1P2Q3R4S5T6U7V8W9X0Y1Z2
内容的提问来源于stack exchange,提问作者Caio Sheperd
相关产品推荐
相关产品推荐

