【问题标题】:Blowfish Encryption Decryption河豚加密解密
【发布时间】:2013-09-20 14:27:08
【问题描述】:

我正在我当前的应用程序中实现河豚算法,我收到错误

#import "NSData+Base64Utilities.h"

我必须添加哪个框架或文件才能消除此错误?

我正在使用以下代码,我是否遵循正确的方法?

define PADDING_PHRASE @"       "

import "CryptoUtilities.h"
import "blowfish.h"
import "NSData+Base64Utilities.h"

@implementation CryptoUtilities

+ (NSString *)blowfishEncrypt:(NSData *)messageData usingKey:(NSData *)secretKey
{
NSMutableData *dataToEncrypt = [messageData mutableCopy];
NSMutableData *emptyData = [[PADDING_PHRASE dataUsingEncoding:NSUTF8StringEncoding] mutableCopy];

emptyData.length = 8 - [dataToEncrypt length] % 8;

// Here we have data ready to encipher
[dataToEncrypt appendData:emptyData];

BLOWFISH_CTX ctx;
Blowfish_Init (&ctx, (unsigned char*)[secretKey bytes], [secretKey length]);

NSRange aLeftRange, aRightRange;
NSData *aLeftBox, *aRightBox;
unsigned long dl = 0, dr = 0;

for (int i = 0; i < [dataToEncrypt length]; i += 8) { // Divide data into octets...
    // …and then into quartets
    aLeftRange = NSMakeRange(i, 4);
    aRightRange = NSMakeRange(i + 4, 4);

    aLeftBox = [dataToEncrypt subdataWithRange:aLeftRange];
    aRightBox = [dataToEncrypt subdataWithRange:aRightRange];

    // Convert bytes into unsigned long
    [aLeftBox getBytes:&dl length:sizeof(unsigned long)];
    [aRightBox getBytes:&dr length:sizeof(unsigned long)];

    // Encipher
    Blowfish_Encrypt(&ctx, &dl, &dr);

    // Put bytes back
    [dataToEncrypt replaceBytesInRange:aLeftRange withBytes:&dl];
    [dataToEncrypt replaceBytesInRange:aRightRange withBytes:&dr];
}

return [dataToEncrypt getBase64String];
} 

【问题讨论】:

  • 错误是什么?
  • @trojanfoe 错误是“找不到文件”,我必须为“NSData+Base64Utilities.h”添加哪个框架或文件?

标签: macos cocoa


【解决方案1】:

NSData+Base64Utilities.h 看起来像是为 NSData 添加 Base64 支持的类别的头文件。

错误告诉您编译器找不到该类别的文件。您需要将它们添加到您的项目中。

编辑添加

如果您的目标是 iOS7,那么您可以使用处理 base64 编码的新 NSData 方法。您不需要使用您要查找的类别。

【讨论】:

  • 是的,你能给我这些文件链接,所以我下载并添加这些文件。
  • @QueueOverFlow 太棒了:D
  • @QueueOverFlow 这不是标准扩展,有几个。由于它们没有相同的实现,因此您最好使用在此代码中使用的相同实现,您似乎是从某个地方找到的。
  • @QueueOverFlow 是什么让您认为 Abizern 知道从哪里获取这些文件?仅仅因为他认识到这个问题并不意味着他知道那个具体的实施。请自己考虑。
  • @QueueOverFlow:您应该询问该答案的作者他们推荐的 Base64 类别。
猜你喜欢
  • 1970-01-01
  • 2014-04-30
  • 2016-02-29
  • 1970-01-01
  • 1970-01-01
  • 2012-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多