js中怎么使用AES-128-CBC加密

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js中怎么使用AES-128-CBC加密相关的知识,希望对你有一定的参考价值。

参考技术A 不可用MD5为JS文件加密,MD5是摘要算法,结果是不可逆的,是单向的 JS经过MD5后无法进行还原,加密后JS将永远无法使用本回答被提问者采纳

使用 AES/CBC/PKCS7Padding 的 JAVA 加密

【中文标题】使用 AES/CBC/PKCS7Padding 的 JAVA 加密【英文标题】:JAVA Encryption with AES/CBC/PKCS7Padding 【发布时间】:2016-08-21 14:18:33 【问题描述】:

我遇到了使用 java AES/CBC/PKCS7Padding 加密的问题。我已经搜索并关注直到使用BouncyCastle 提供程序。但我仍然无法获得正确的加密

假设要求是:

加密类型:对称 算法:AES 块大小 = 128 位(16 字节) 密码模式:CBC 填充模式:PKCS7 加密密钥长度:256 位(32 字节) 向量初始化长度(IV):128位(16字节)

样本:

普通数据 = ABC123 加密数据(base64编码)= CtGtW4hJfXxilSfNR1xmrg==

我的代码是……

public final class StringFunc 
    final static String key = "jb2a19ou79rws6zknjlr803fvfgiyp1k";
    final static String algorithm = "AES/CBC/PKCS7Padding";
    final static String iv = "hod74ty97wr97g83";
    private static Cipher cipher = null;
    private static SecretKeySpec skeySpec = null;
    private static IvParameterSpec  ivSpec = null;

    private static void setUp()
        try
            Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); 
            skeySpec = new SecretKeySpec(key.getBytes(), "AES");
            ivSpec = new IvParameterSpec(iv.getBytes());
            cipher = Cipher.getInstance(algorithm);
        catch(NoSuchAlgorithmException | NoSuchPaddingException ex)
        
    

    public static String encrypt(String str)
        try
            Integer strL = (int) Math.ceil(str.length() / 8.0);
            Integer strB = strL*8;
            str = padRight(str, '', strB);
            setUp();
            try 
                cipher.init(Cipher.ENCRYPT_MODE, skeySpec, ivSpec);
             catch (InvalidAlgorithmParameterException ex) 
                return "";
            
            byte[] enc = cipher.doFinal(str.getBytes());
            return new String(Base64.encodeBase64(enc));
        catch(InvalidKeyException | IllegalBlockSizeException | BadPaddingException ex)
            return "";            
        
    

    public static String padRight(String msg, char x, int l) 
        String result = "";
        if (!msg.isEmpty()) 
            for (int i=0; i<(l-msg.length()); i++) 
                result = result + x;
            
            result = msg + result;
        
        return result;
    

我仍然无法获得正确的加密。任何人都可以提供帮助或提供建议吗?

【问题讨论】:

我已经测试了你的代码,但我有一个例外。你测试过你的代码吗?也不例外? 问题,我只是不能像给我的例子那样得到正确的结果。代码已经剪掉了,先生,你不能只是复制粘贴来运行它。 【参考方案1】:

根据给定的输入猜测,您应该遇到 Java 对密钥长度的限制: 由于美国不允许使用硬安全密钥,Java 的密钥长度默认限制为 128 位。

要启用大于 128 位的密钥,您必须使用官方“无限制”政策 (here for SE8) 更改 Java 版本的政策

用下载覆盖 lib/security 中的当前策略就足够了。

【讨论】:

先生,我会调查一下,谢谢,我会尽快更新进度。

以上是关于js中怎么使用AES-128-CBC加密的主要内容,如果未能解决你的问题,请参考以下文章

js AES-128-CBC 解密易班轻应用verify_request

AES (aes-cbc-128, aes-cbc-192, aes-cbc-256) 使用 openssl C 加密/解密

nodejs中aes-128-cbc加密和解密

有没有办法在没有 iv 的情况下在 openssl 中运行 aes-128-cbc 加密?

无法使用来自 AES-256-CBC 的 pgcrypto 解密,但 AES-128-CBC 可以

使用 OpenSSL/C++ 和 PHP/Mcrypt 的 AES-128-CBC 加密:仅解密第一个块