画像ファイルの暗号化
画像ファイルをプレビューなどで開いて画像を見れなくしたいです。
画像データはNSDataにエンコードして書き出してますが、
考えられるのは、NSDataを読み書きの時にシフト演算して、
データの値をずらすなどですが、やってみたところ、
型がintじゃないとかエラーが出て出来ませんでした。
何かいい方法はありませんか?
Mac mini, OS X Mountain Lion (10.8.4)
画像ファイルをプレビューなどで開いて画像を見れなくしたいです。
画像データはNSDataにエンコードして書き出してますが、
考えられるのは、NSDataを読み書きの時にシフト演算して、
データの値をずらすなどですが、やってみたところ、
型がintじゃないとかエラーが出て出来ませんでした。
何かいい方法はありませんか?
Mac mini, OS X Mountain Lion (10.8.4)
暗号化といえば、よく乱数値をXORする手法が使われます。
擬似乱数なので、シード値が同じなら同じ乱数が生成されますので、それを利用します。
論理的にはわかりましたが、
NSDataの値の変更の仕方がわかりません
NSData *data = 10;
と例えば出来ないのは何故ですか?
NSDataは変更不可なデータを表すクラスです。
データの内容を変更したければ、NSMutableDataを使ってください。
nsmutabledataであろうと、
nsdata型系は、値が直接いじれないとエラーが出てしまいます
赤いエラーなのでどうしようもないです。
ググってもまったくそれらしことはヒットしませんでした
nsdataをバイト配列に変えるって画像データは、バイト配列ですよねもともと?
以前申されたやり方でやりたいのですが、数値が操作できません
NSMyableDataにしろNSDataにしろいずれもClass オブジェクトですよ。 つまり
NSMutableData *data;
の data はたんなるポインタです。 そこに data = 10; としたらエラーになるのは当然だと思いませんか?
// dataの初期化
NSMutableData* data = [NSMutableData dataWithCapacity:3];
NSLog(@"data = %@", data);
// dataに3バイト追加
char a[] = {0x10, 0x11, 0x12};
[data appendBytes:a length:sizeof(a)];
NSLog(@"data = %@", data);
// dataの2バイト目を変更
char b[] = {0xab};
[data replaceBytesInRange:NSMakeRange(1, sizeof(b)) withBytes:b];
NSLog(@"data = %@", data);
// dataの1バイト目を削除
[data replaceBytesInRange:NSMakeRange(0, 1) withBytes:nil length:0];
NSLog(@"data = %@", data);
// dataの全バイトを反転
char* c = data.mutableBytes;
for (NSUInteger i = 0; i < data.length; i++) {
c[i] ^= 0xff;
}
NSLog(@"data = %@", data);この程度のことは、簡単にできるようになりましょう。
ありがとうございます
なんとか解決しました!
ちなみにコードは、
NSImage *image = [NSImage imageNamed:@”img”];
NSData *f2Data = [image TIFFRepresentation];
NSBitmapImageRep *brep = [NSBitmapImageRep imageRepWithData:f2Data];
f2Data = [brep representationUsingType:NSPNGFileType properties:nil];
NSString *bcPath = @”testImage”;
NSMutableData *data = [NSMutableData dataWithCapacity:sizeof(f2Data)];
[data appendData:f2Data];
char *c = data.mutableBytes;
c[0] ^= 0xff;
[data writeToFile:bcPath atomically:YES];
これで、開けない画像ファイルが出来ました
ありがとうございました
画像ファイルの暗号化