CryptoJs加密在android中不起作用

时间:2017-08-29 10:26:05

标签: android ios encryption aes

我必须在Android应用中实现加密。 Web开发人员正在使用CryptoJs库。表示加密算法是AES256加密。

iOS和Android平台都提供不同的字符串,并且在web上接受iOS。对于示例字符串,它应该是相同的。

我正在使用下面的代码片段(有两种不同的不同功能):

((MainAcitivty)getActivity).test()

我也用过:

private void newEnc() {

        String secret = "LSC@SD2017@ps";
         String cipherText = "{\"device_type\":\"iOS\",\"email\" : \"jhon@gmail.com\",\"device_id\" : \"14105DA4-CEE5-431E-96A2-2331CDA7F062\",\"password\" : \"123456\",\"device_token\" : \"B44777563552882EC3139A0317E401B55D6FC699D0AC3D279F392927CAF9B566\"}";


        KeyGenerator kgen = null;
        try {
            kgen = KeyGenerator.getInstance("AES");
            SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
            sr.setSeed(secret.getBytes("UTF8"));
            kgen.init(256, sr);
            SecretKey skey = kgen.generateKey();

            Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");
            SecretKeySpec skeySpec = new SecretKeySpec(skey.getEncoded(), "AES");
            c.init(Cipher.ENCRYPT_MODE, skeySpec);
            byte[] decrypted = c.doFinal(cipherText.getBytes());

            System.out.println(Base64.encodeToString(decrypted, Base64.NO_WRAP));

           // decrypted = Base64.encodeBase64(decrypted);
          //  byte[] iv = Base64.encodeBase64(c.getIV());
          //  Log.e("encryptString", new String(decrypted));
          //  Log.d("encryptString iv", new String(iv));


        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (NoSuchPaddingException e) {
            e.printStackTrace();
        } catch (BadPaddingException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IllegalBlockSizeException e) {
            e.printStackTrace();
        }


    }

但没有人给出相同的结果。

在iOS中,他们正在使用https://github.com/etienne-martin/CryptoJS.swift

我应该怎么做才能使两个加密字符串匹配。

1 个答案:

答案 0 :(得分:0)

实际的cipherText(不要混淆具有相同变量名称的字符串)被格式化并以“Salted__”开头,并且可能是加密参数。两个不同的功能以不同的格式创建不同的输出。它们不能产生相同的输出。

注1,混淆cipherText

// String cipherText = "{\"device_type\":\"iOS\",\"email\" : \"jhon@gmail.com\",\"device_id\" : \"14105DA4-CEE5-431E-96A2-2331CDA7F062\",\"password\" : \"123456\",\"device_token\" : \"B44777563552882EC3139A0317E401B55D6FC699D0AC3D279F392927CAF9B566\"}";
// String cipherText = "U2FsdGVkX1+tsmZvCEFa/iGeSA0K7gvgs9KXeZKwbCDNCs2zPo+BXjvKYLrJutMK+hxTwl/hyaQLOaD7LLIRo2I5fyeRMPnroo6k8N9uwKk=";  


注2:
Base64对人类来说是无用的,它专为计算机而设计,十六进制适用于人类和计算机,具有直接的位到字节的对应关系。