gpt4 book ai didi

java - 如何从 Java Cipher 加密的文件中解密 objective-c

转载 作者:行者123 更新时间:2023-11-28 23:14:12 24 4
gpt4 key购买 nike

我在 Java 中有一个加密方法。

public static String encrypt(String orignal){
SecretKeySpec key = new SecretKeySpec(keyString.getBytes(), "AES");
IvParameterSpec initalVector = new IvParameterSpec(initialVectorParam.getBytes());

try{
Cipher cipher = Cipher.getInstance("AES/CFB8/NoPadding");
/////////////// encrypt /////////////////
cipher.init(Cipher.ENCRYPT_MODE, key, initalVector);
Log.d("AES", "oriByte: "+ orignal.getBytes());
int length = orignal.length();
for(int i=0; i<length; i++){

}
byte[] test = cipher.doFinal(orignal.getBytes());
Log.d("AES", "encByte: "+ test);
return bytes2Hex(test);
}catch (Exception e) {
Log.d("AES", "Encrypt Exception:"+orignal);
return "";
}
}

为了与 PHP 兼容,我使用“AES/CFB8/NoPadding”选项。在 PHP 中:$sCipher = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $sKey, $sStr, MCRYPT_MODE_CFB, $sIV);

我从这里得到了一个 Objective-c 密码。 https://gist.github.com/838614

我发现在Objective-c Cipher中没有像java那样的IvParameterSpec。此外,getBytes 方法返回的值与 java.getBytes 不同。(我认为这是因为java使用了不同的编码方式。)

那么,我如何在 Objective-c 中应用 IvParameterSpec。有什么方法可以像 Objective-c 中的 java 一样获取“getBytes”值吗?

最佳答案

对于初始化 vector ,请参阅您的 pastie 中的第 24 行:

NULL /* initialization vector (optional) */,

那是您将通过 IV 的地方。

但是如果不知道用于创建用作 IV 的字节的 Java 代码的编码字符串,您将无法正确地为加密设置种子以解密数据,即使您知道字符串在屏幕上显示为.换句话说,仅仅因为 IV 看起来像“abc123”并不意味着 Java 写入 IV 缓冲区的字节将与您从 strncpy() 从一个 C 字 rune 字缓冲区。您必须同意编码作为处理数据协议(protocol)的一部分。

您还需要就 key 大小达成一致。您的 Java 代码没有指定 AES key 中有多少位。

一旦你解决了这个问题,你会想要使用这样的调用:

const void *key = /* KEY BYTES */;
const void *iv = /* IV BYTES */;
const void *text = /* CIPHER TEXT */;
size_t textlen = /*...*/;
size_t outlen = 0;
(void)CCCrypt(kCCDecrypt, kCCAlgorithmAES128, 0/*use CBC mode*/,
key, kCCKeySizeAES128, iv,
text, textlen,
&text, textlen, &outlen);

假设一切顺利,明文将覆盖密文。解密期间写入text的数据量将存储在outlen中。检查错误是你的责任;标题有很好的评论。

一旦你有了数据,你会想用正确的编码将它放入 NSString(+[NSString initWithData:encoding:] 会起作用),然后你有一个字符串,你可以像任何其他字符串一样从 Obj-C 中使用它。

关于java - 如何从 Java Cipher 加密的文件中解密 objective-c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7155420/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com