You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 13:36:03