Попытка конвертировать метод объектива COROR ниже Objective C XOR для Swift, но получение ошибки, например: «Не удалось найти перегрузку для« индекса », который принимает предоставленный аргумент». Любая помощь будет оценена по достоинству.XOR Шифрование в Swift IOS
Objective C
+(NSString *) encryptDecrypt:(NSString *)input staticKey:(NSString *) staticKey
{
const char *key = [staticKey UTF8String];; //Can be any chars, and any size array
NSMutableString *output = [[NSMutableString alloc] init];
for(int i = 0; i < input.length; i++) {
char c = [input characterAtIndex:i];
c ^= key[i % sizeof(key)/sizeof(char)];
[output appendString:[NSString stringWithFormat:@"%c", c]];
}
return output;
}
Swift
func encryptDecrypt(input: String, staticKey: String) -> String {
let cstr = staticKey.cStringUsingEncoding(NSUTF8StringEncoding)
var output: NSMutableString = NSMutableString()
for (index, element) in enumerate(input) {
// for var i = 0; i < input.length; i++ {
var c: Character = element
let char = c^cstr[index % sizeof(cstr)/sizeof(Character)]
output.appendString("\(c)")
}
return output as String
}
Почему бы не использовать реальное шифрование, AES от общего Crypto? Вот одна ошибка с XOR: если есть часть данных, которые будут зашифрованы, которые имеют все одинаковое значение или известное значение, ключ будет отображаться только с помощью смещения. В случае, когда я увидел, была преамбула строки 0x00 байт, и она полностью раскрыла ключ. Вам все равно придется проверять «использование шифрования», но когда вы перейдете в BIS для авторизации экспорта, у вас появятся проблемы, потому что вы не используете известный метод шифрования. – zaph
@zaph xor предназначен для шифрования на уровне ключа и передается другому приложению для шифрования данных с использованием AES – nik
Создание собственного шифрования может быть забавным, но оно небезопасно. [Закон Шнайера] (https://www.schneier.com/blog/archives/2011/04/schneiers_law.html): «Любой, от самого невежественного любителя до лучшего криптографа, может создать алгоритм, который он сам может», т перерыв ". Для генерации ключ от пароля использует PBKDF2. Для шифрования ключей или паролей используется AES. Используйте наилучшие криптографические примитивы (например, стандарты NIST) и улучшенные протоколы безопасности. Если вы хотите играть нормально, но не используйте это для защиты других данных, выполнение этого будет бессовестным. – zaph