【问题标题】:Take whats the user enters in a text field and store it in a text file?获取用户在文本字段中输入的内容并将其存储在文本文件中?
【发布时间】:2012-12-17 19:16:45
【问题描述】:

我正在尝试使用文本文件创建一个简单的受密码保护的应用程序来存储用户输入的密码。我想将文本字段中的内容存储在一个文件中,并最终将该文件中的内容与用户在另一个文本字段中输入的内容进行比较。这是我所拥有的:

 //Setting the string to hold the password the user has entered
    NSString *createPassword1 = passwordSet.text;

    //creating a muttable array to store the value of createPassword1
    NSMutableArray *passwordArray = [NSMutableArray array];

    //storing createpassword1 into the first element of the array
    [passwordArray addObject:createPassword1];

    NSLog(@"%@",[passwordArray objectAtIndex:0]);//seeing if it is stored correctly (it is)


    //path for searching for the file
    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    //my filename
    NSString *fileName = @"PasswordFile.txt";

    NSString *fileAndPath = [path stringByAppendingPathComponent:fileName];

    if (![[NSFileManager defaultManager] fileExistsAtPath:fileAndPath]) {
        [[NSFileManager defaultManager] createFileAtPath:fileAndPath contents:nil attributes:nil];
    }

    [[[passwordArray objectAtIndex:0] dataUsingEncoding:NSUTF8StringEncoding] writeToFile:fileAndPath atomically:YES];

任何帮助将不胜感激。

【问题讨论】:

  • 制作.plist 文件而不是.txt 文件..... !!并为它做谷歌,有很多示例代码......祝你好运!
  • 将明文密码写入文本文件是一个糟糕的想法(非常不安全)。你真的应该为此使用钥匙串。从GenericKeychain 示例应用程序中获取KeychainItemWrapper 类。
  • 是的,同意...钥匙链更好!
  • “我正在尝试制作一个简单的受密码保护的应用程序” - 对于这个简化的用途(我猜这个应用程序没有处理任何国家机密)我认为密码学并不是真正必要的,它就足够了将密码存储在文档目录中。
  • @Mario 也许——但指出更好的方法是有帮助的。 OP 可能不了解他们的决定的影响。需求随时间而变化。使用钥匙串可能是更好的长期选择。

标签: iphone objective-c ios xcode


【解决方案1】:

你做的太复杂了。 为什么使用 NSMutableArray(“passwordArray”)来存储单个密码? 为什么将其转换为 NSData 并将其写入文件? 只需使用一个字符串并使用它的 writeToFile 方法。 或者使用 NSArray 的 writeToFile 方法。

另外,我个人最喜欢的:使用 NSUSerDefaults à la:

[[NSUserDefaults standardUserDefaults] setValue: myPasswordString forKey:@"appPassword"]];

EDIT 回应一些 cmets: 以上仅适用于需要以非常低级别的方式进行密码保护的“琐碎”应用程序。任何保护真正敏感数据的事情都应该以不同的方式处理。 原贴明确说明

我想将文本字段中的内容存储在一个文件中,并最终将该文件中的内容与用户在另一个文本字段中输入的内容进行比较。

因此可以假设高级安全性在这里不是问题。

【讨论】:

  • 不一定。如果需要多用户(这对于使用数组是有意义的),只需在 userDefaults 中存储数组而不是字符串
  • 但是,密码不仅仅是他必须存储的东西。他想知道哪个用户的密码:) ...是的,您可以将所有内容保存在NSUserDefaults 中,但这会有点困难!
  • @VakulSaini 用户名/密码字典与NSUserDefaults 无关。
  • @maddy - 在编码中有很多方法可以做同样的事情,但我们总是试图找到更好的方法.... !!
  • @VakulSaini 同意。如果您要记下某人的答案并声称有更好的方法,那么您必须提供更好的方法。关键是要有所帮助,而不是消极。
猜你喜欢
  • 2017-08-23
  • 2014-07-31
  • 2013-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多