当前位置: 首页 > 知识库问答 >
问题:

iOS AES/CBC/PKCS7padding 128位算法加密解密字符串的问题

方风华
2023-03-14
For Example: 
  String text = "rzp_test_DezQO1BVMXhkZY";
  String key = "5b0904cfada01b8182bcc029b928244d"; // secret key - 128 bit key
  String iv_key ="c999cbd1f130db1d";
// Create key and cipher

Cipher dcipher, d1cipher;

      IvParameterSpec ivSpec = new IvParameterSpec(iv_key.getBytes());
      Key aesKey = new SecretKeySpec(key.getBytes(), "AES"); 

      ecipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
      dcipher = Cipher.getInstance("AES/CBC/PKCS7Padding");

      ecipher.init(ENCRYPT_MODE, aesKey, ivSpec);
      dcipher.init(DECRYPT_MODE, aesKey, ivSpec);
  public String encrypt(String str) throws Exception {
        // Encode the string into bytes using utf-8
        byte[] utf8 = str.getBytes("UTF8");

        // Encrypt
        byte[] enc = ecipher.doFinal(utf8);

        // Encode bytes to base64 to get a string
        return Base64.encodeToString(enc, Base64.DEFAULT);
    }
 public String decrypt(String str) throws Exception {
        // Decode base64 to get bytes
        String decrypted = "";
        try {
            byte[] dec = Base64.decode(str, Base64.DEFAULT);

            byte[] utf8 = dcipher.doFinal(dec);

            // Decode using utf-8
            decrypted = new String(utf8, "UTF8").trim();

        } catch (Exception e) {


            e.printStackTrace();
        }

        return decrypted;
    }
String encrypted = encrypt(text);
System.out.println("Encrypted String: " + encrypted);

String decrypted = decrypt(encrypted);
System.out.println("Decrypted String: " + decrypted);
   String decrypted1 = decrypt("c7076c78fc5d9d92c1d86c1500dcc0366ddf1b6e32df00ceadc911239935460d");
   System.out.println("Decrypted String1: " + decrypted1);
W/System.err: javax.crypto.BadPaddingException: error:1e000065:Cipher functions:OPENSSL_internal:BAD_DECRYPT
W/System.err:     at com.android.org.conscrypt.NativeCrypto.EVP_CipherFinal_ex(Native Method)
W/System.err:     at com.android.org.conscrypt.OpenSSLCipher$EVP_CIPHER.doFinalInternal(OpenSSLCipher.java:570)
W/System.err:     at com.android.org.conscrypt.OpenSSLCipher.engineDoFinal(OpenSSLCipher.java:351)
W/System.err:     at javax.crypto.Cipher.doFinal(Cipher.java:1741)
W/System.err:     at com.example.aesencryption.Activities.MainActivity1.decrypt(MainActivity1.java:178)
func aesEncrypt() -> String {

        let iv: [UInt8] = Array(AES_IV.utf8)
        let key: [UInt8] = Array(AES_SECRET.utf8)

        do{
            let encrypted = try AES (key: key, blockMode: CBC(iv: iv)).encrypt([UInt8](self.data(using: .utf8)!))
            return Data(encrypted).base64EncodedString()
        }
        catch{
            print("error on encrypting data ")
            return ""
        }

    }

    func aesDecrypt() -> String {

        let iv: [UInt8] = Array(AES_IV.utf8)
        let key: [UInt8] = Array(AES_SECRET.utf8)
        do{
            guard let data = Data(base64Encoded: self) else { return "" }
            let decrypted = try AES(key: key, blockMode: CBC(iv: iv), padding: .pkcs7).decrypt([UInt8](data))
            return String(bytes: decrypted, encoding: .utf8) ?? self
        }
        catch{
            print("error on encrypting data ")
            return ""
        }

    }

共有1个答案

卜勇
2023-03-14
  public static String decryptKey(String key_id) {
            // Decode base64 to get bytes
            String decrypted = "";
            try {

                Cipher dcipher = Cipher.getInstance("AES/CBC/PKCS7Padding");

                dcipher.init(DECRYPT_MODE, aesKey, ivSpec);

                byte[] utf8 = dcipher.doFinal(hexToBytes(key_id));

                // Decode using utf-8
                decrypted = new String(utf8, "UTF8").trim();

            } catch (Exception e) {


                e.printStackTrace();
            }

            return decrypted;
        }

     public static byte[] hexToBytes(String str) {
            if (str == null) {
                return null;
            } else if (str.length() < 2) {
                return null;
            } else {
                int len = str.length() / 2;
                byte[] buffer = new byte[len];
                for (int i = 0; i < len; i++) {
                    buffer[i] = (byte) Integer.parseInt(str.substring(i * 2, i * 2 + 2), 16);
                }
                return buffer;
            }
        }
 类似资料:
  • 所以我有一个AES-256-ecb base64字符串,我用在线工具解码了它。然而,我更喜欢命令行,所以我尝试使用命令行来解码它。 这是我尝试过的,但我得到了严重的解密错误 是加密的base64文本 -aes-256-ecb是加密密码 而366a74cb3c959de17d61db30591c39d1是关键 结果应该是另一个base64字符串:

  • 我感兴趣的是构建一个个人使用的小应用程序,它将使用JavaScript在客户端加密和解密信息。加密的信息将存储在服务器上的数据库中,但不会存储解密的版本。 它不一定要是超级duper安全的,但我想使用一个当前未中断的算法。 理想情况下我可以做一些 生成编码字符串,以及类似于 以后再解码。 到目前为止,我已经看到了以下内容:http://bitwiseshiftleft.github.io/sjcl

  • 大家好,我用用算法'aes-256-cbc'用PHP加密了字符串 密钥: 向量:

  • 问题内容: 我是密码学的新手。我希望学习如何在文件中加密和解密文本……当我在net中引用相关文章时。我怀疑对同一文本进行多次加密后,单个文本的加密文本是否会相同?谁能解决我的疑问? 问题答案: 这是使用该类的示例:

  • 本文向大家介绍php加密解密字符串示例,包括了php加密解密字符串示例的使用技巧和注意事项,需要的朋友参考一下 收录了一些比较经典的PHP加密解密函数代码,分享给大家。加密解密原理一般都是通过一定的加密解密算法,将密钥加入到算法中,最终得到加密解密结果。     希望本文所述对大家PHP程序设计有所帮助。