- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 iphone 上使用 3des 加密一些东西,它必须与 java 和 .NET 的结果相匹配。
我的代码是:
+ (NSString*) doCipher:(NSString*)plainText:(CCOperation)encryptOrDecrypt {
const void *vplainText;
size_t plainTextBufferSize;
if (encryptOrDecrypt == kCCDecrypt)
{
NSData *EncryptData = [NSData dataWithBase64EncodedString:plainText];
plainTextBufferSize = [EncryptData length];
vplainText = [EncryptData bytes];
}
else
{
NSData *tempData = [plainText dataUsingEncoding:NSASCIIStringEncoding];
plainTextBufferSize = [tempData length];
vplainText = [tempData bytes];
}
CCCryptorStatus ccStatus;
uint8_t *bufferPtr = NULL;
size_t bufferPtrSize = 0;
size_t movedBytes = 0;
// uint8_t ivkCCBlockSize3DES;
bufferPtrSize = (plainTextBufferSize + kCCBlockSize3DES) & ~(kCCBlockSize3DES - 1);
bufferPtr = malloc( bufferPtrSize * sizeof(uint8_t));
memset((void *)bufferPtr, 0x0, bufferPtrSize);
NSString *key = [NSString MD5:@"HSDNIFFU"];
NSData *_keyData = [key dataUsingEncoding:NSASCIIStringEncoding];
NSLog(@"key byte is %s", [_keyData bytes]);
// Initialization vector; dummy in this case 0's.
uint8_t iv[kCCBlockSize3DES];
memset((void *) iv, 0x0, (size_t) sizeof(iv));
ccStatus = CCCrypt(encryptOrDecrypt,
kCCAlgorithm3DES,
kCCOptionPKCS7Padding,
(const void *)[_keyData bytes], //"123456789012345678901234", //key
kCCKeySize3DES,
iv, //iv,
vplainText, //plainText,
plainTextBufferSize,
(void *)bufferPtr,
bufferPtrSize,
&movedBytes);
//if (ccStatus == kCCSuccess) NSLog(@"SUCCESS");
/*else*/ if (ccStatus == kCCParamError) return @"PARAM ERROR";
else if (ccStatus == kCCBufferTooSmall) return @"BUFFER TOO SMALL";
else if (ccStatus == kCCMemoryFailure) return @"MEMORY FAILURE";
else if (ccStatus == kCCAlignmentError) return @"ALIGNMENT";
else if (ccStatus == kCCDecodeError) return @"DECODE ERROR";
else if (ccStatus == kCCUnimplemented) return @"UNIMPLEMENTED";
NSString *result;
if (encryptOrDecrypt == kCCDecrypt)
{
// result = [[NSString alloc] initWithData: [NSData dataWithBytes:(const void *)bufferPtr length:[(NSUInteger)movedBytes] encoding:NSASCIIStringEncoding]];
result = [[[NSString alloc] initWithData:[NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes] encoding:NSASCIIStringEncoding] autorelease];
}
else
{
NSData *myData = [NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes];
NSLog(@"data is: %@", myData);
result = [myData base64Encoding];
}
return result;
}
这段代码成功地加密和解密了一个字符串。如您所见,它在 key 上使用了 md5。但是,它与 .NET 和 java 的结果不匹配。
Java 开发人员的 Java 代码如下所示:
public static byte[] encryptTripleDES(String message) throws Exception {
final MessageDigest md = MessageDigest.getInstance("md5");
final byte[] digestOfPassword = md.digest("--KEY--".getBytes("utf-8"));
final SecretKey key = new SecretKeySpec(digestOfPassword, "DESede");
final IvParameterSpec iv = new IvParameterSpec(new byte[8]);
final Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key, iv);
return cipher.doFinal(message.getBytes("utf-8"));
}
不幸的是,我对 Java 加密不太熟悉。我确实注意到,在 KEY 上使用 md5 后,它使用 SecretKeySpec 方法创建了一个 SecretKey。我的 Java 开发人员告诉我,他需要使用 key 的字节数组创建一个 key ,以便它可以匹配 .NET key 。
任何人都可以向我更好地解释这一点并帮助我提供一个解决方案来匹配 .NET 和 java 对应结果吗?
最佳答案
我想通了。在我 md5 之后生成的 key 是 32 字节。从阅读其他帖子来看,kCCKeySize3DES 似乎只有 24 个字节。如果我放置一个 24 字节或更少的 key (无 md5),这似乎可以完美地工作。
关于java - iPhone 3Des 加密匹配 Java 和 .NET key 问题,SecretKeySpec?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3443457/
我正在尝试使用 DES API 来实现 3Des,如下所示: des(input, output, key, mode) 其中输入、输出和 key 各为 8 个字节,模式标识加密和解密类型。我想知道是
有人比较这些加密算法的优缺点吗? 最佳答案 使用 AES。 更多详细信息: DES 是七十年代的旧“数据加密标准”。它的 key 大小对于适当的安全性而言太短(56 个有效位;这可以被暴力破解,如 m
我收到了来自Java的加密字符串,我可以看到Java加密的源代码。我用C#编写了解密代码。但总是在“FlushFinalBlock”处报错。错误消息:“System.Security.Cryptogr
我应该使用加密 DES-EDE3-CBC。这是否意味着它是密码 block 链接模式下的 Triple DES? 最佳答案 是的。 EDE 部分告诉您使用 3DES 的特定变体(无论如何,每个人都默认
有没有人一起比较这些加密算法的优缺点? 最佳答案 使用 AES。 更多细节: DES 是七十年代的旧“数据加密标准”。它的 key 大小对于适当的安全性来说太短了(56 位有效位;这可以被强制执行,正
我在整个网络上寻找这个问题,但找不到明确的答案: 我有一些使用 DESCryptoServiceProvider(Mode = CRC,Padding = none)的 C# 代码,并且我正在使用 o
嗨,大家好,我有 java 代码,它为我生成三重加密代码,现在我尝试使用 crypto-js 在 javascript 上使用它,但这两个代码提供了不同的 key ,我不知道为什么以及如何获得相同的
我需要在我的 Erlang/OTP Web 服务器和 JavaScript 之间传送加密数据。我已经 checkout Crypto-js.js Library 。我想使用 DES 加密我的数据 在
我发现了一个问题,Elephantik 的答案基本上回答了我的问题: DES Initialization Vector in C# 我有一个使用 DES.EXE 命令行工具加密的文件。我可以使用以下
我正在努力让 Java 代码输出与 C# 代码相同的 Byte[]。 C# 代码: using System; using System.IO; using System.Security.Crypt
我从第三方公司收到了一些 DES 加密的东西。我无法用 ruby 解密它。但它适用于我的 java 代码。 这里是java代码: public class Main { public static v
它似乎混淆了 Triple-DES(>128 位)和普通 DES(64 位)。我正在尝试使用 Java 1.5 使用 Triple DES(或 DESede)加密 Derby 数据库 我找到了这个 d
我遇到了编码问题。我想在 HTML 文件中添加法语口音。 我在 Ubuntu 上,我的编辑器是 SciTE。 这是一个 Ruby on Rails 程序。 ActionView::WrongEncod
这个问题已经有答案了: Error parsing XHTML: The content of elements must consist of well-formed character data
我需要加密 ISO 8583消息...这里的问题是消息比 key 长。我需要有人帮我加密这个字符串。 例如:我的字符串中有 300 个字符;我应该单独加密每 16 个字符然后连接它们,因为我的主 ke
我想知道在下面的代码中是否添加了 PKCS#5 填充?如果不是如何添加? $message = "insert plaintext message here"; $iv = pack('H*', '
我已经使用内置库在 Java 中编码了 DES,但我没有得到正确的加密结果。请解释一下我在哪里犯了错误 import javax.crypto.Cipher; import javax.crypto.
在下面,您将看到一个简单的 Java Card 小程序,它被编写为使用不同的 DES 和 3DES 算法加密和解密数据。 这些是支持的命令: 00 C0 00 00 | key 长度 | KeyVal
我在我的应用程序中使用 DES-ECB + base64 加密。这就是我称之为“Crypto”的类的代码 public class Crypto { public static string
我创建了一个 Android 应用程序,它从安装在智能手机上的传感器读取数据,并将这些数据以 JSON 格式发送到应用程序服务器。 我将服务器和 Android 应用程序配置为通过 https 协议(
我是一名优秀的程序员,十分优秀!