ZBLOG

public static String encrypt(String plainText, SecretKey secretKey) throws Exception { Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.ENCRYPT_MODE, secretKey); byte[] encryptedBytes = cipher.doFinal(plainTex...

要将Java中的AES加密实现转为Web浏览器中使用的实现方式,可以使用JavaScript的Crypto API。以下是一个示例,演示如何在Web浏览器中使用AES对称加密来实现与您提供的Java代码相似的功能。

请注意,这里需要使用Base64编码,因为您的Java代码将加密后的字节数组转换为Base64字符串。

JavaScript AES 加密示例

  1. 创建AES加密函数
async function encrypt(plainText, key) {
    // 将字符串转换为字节数组
    const encoder = new TextEncoder();
    const data = encoder.encode(plainText);

    // 导入密钥
    const importedKey = await window.crypto.subtle.importKey(
        "raw",
        key,
        { name: "AES-CBC" },
        false,
        ["encrypt"]
    );

    // 生成随机初始化向量(IV)
    const iv = window.crypto.getRandomValues(new Uint8Array(16)); 

    // 使用 AES-CBC 模式进行加密
    const encryptedData = await window.crypto.subtle.encrypt(
        {
            name: "AES-CBC",
            iv: iv,
        },
        importedKey,
        data
    );

    // 将结果转为 Base64 编码格式
    let buffer = new Uint8Array(encryptedData);
    
    // 返回包含 IV 和 密文的 Base64 编码字符串 
    return btoa(String.fromCharCode.apply(null, iv)) + '.' + btoa(String.fromCharCode.apply(null, buffer));
}

// 示例用法
(async () => {
  const keyMaterial = crypto.getRandomValues(new Uint8Array(16)); // 生成随机16字节密钥

  const encryptedText = await encrypt("Hello World", keyMaterial);
  console.log("Encrypted:", encryptedText);
})();
  1. 注意事项

    • 在实际应用中,确保安全地管理和存储您的密钥。
    • JavaScript 的 Crypto API 中的 importKey 方法用于导入原始数据类型(如上面的示例所示)。
    • 本示例使用 AES-CBC 模式,这与其他模式(例如 AES-GCM)有所不同,请根据具体需求选择合适的模式。
    • IV(初始化向量)应该是唯一且不可预测,因此我们在每次加密时都生成新的随机值,并将其与密文一起传输。
  2. 解密: 如果您需要实现解密功能,可以类似地创建一个解密函数。确保提供正确的IV和秘钥来恢复原始文本。

希望这个简单的示例能帮助您在浏览器中实现AES加密!如果有任何疑问,请随时询问。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=20637

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?