【发布时间】:2015-01-14 03:44:33
【问题描述】:
经过长时间的寻找解决方案,我今天来找你。
我想用特定的方法加密一个单词。
这个方法已经用 Java 实现了。我会用客观的 C 语言或 swift 得到同样的结果。
我已经探索了几种方法。例如,我尝试运行 RNCryptManager 或 CPCryptController。但我没有得到确凿的结果。
我的java代码如下:
public String encrypt(String texte) {
byte[] bytePassword = Base64.decode(PASSWORD, Base64.DEFAULT);
byte[] byteSalt = Base64.decode(SALT, Base64.DEFAULT);
byte[] bytesIv = Base64.decode(IV, Base64.DEFAULT);
SecretKeyFactory factory = null;
factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
KeySpec spec = new PBEKeySpec(PASSWORD.toCharArray(), byteSalt, NB_ITER_RFC, 128);
SecretKey temp = null;
temp = factory.generateSecret(spec);
byte[] clef = temp.getEncoded();
Cipher c = Cipher.getInstance("DESede/CBC/PKCS5Padding");
IvParameterSpec ivParam = new IvParameterSpec(bytesIv);
c.init(Cipher.ENCRYPT_MODE, temp, ivParam);
byte[] encrypted = c.doFinal(texte.getBytes("UTF-8"));
mdp = Base64.encodeToString(encrypted, Base64.DEFAULT);
Log.i("MDP CHIFFRE", " = " + mdp);
}
我打算使用https://developer.apple.com/library/mac/#samplecode/CryptoCompatibility/
我现在的代码是
QCCPBKDF2SHA1KeyDerivation * op;
NSString * passwordString;
NSData * saltData;
NSData * expectedKeyData;
passwordString = @ "Hello Cruel World!";
saltData = [@ "Some salt sir?" dataUsingEncoding: NSUTF8StringEncoding];
expectedKeyData = [QHex dataWithHexString: @ "e56c27f5eed251db50a3"];
op = [[QCCPBKDF2SHA1KeyDerivation alloc] initWithPasswordString: passwordString saltData: saltData]
op.rounds = 1000;
op.derivedKeyLength = 10;
[[ToolCommon sharedInstance] synchronouslyRunOperation: op];
if (nil == op.error) {
NSString * newStr = [[NSString alloc] initWithData: op.derivedKeyData encoding: NSUTF8StringEncoding]
NSLog (@ "This is it:% @", newStr);
} Else {
NSLog (@ "Error");
}
但是,当我运行此代码时,我得到一个空结果。 我没有看到或可以来我的错误?什么是转换 PBKDF2-HMAC-SHA1 的正确解决方案?
提前谢谢你。
【问题讨论】:
-
您提供了用于密钥派生的 Objective-C 代码,但缺少解密代码。
-
是的,但你知道为什么我需要 null 吗?我应该往哪个方向走?
-
查看@Cy-4AH 的答案,了解
PBKDF2的实现。使用 Common Crypto,它是内置的。
标签: java objective-c encryption swift pbkdf2