In your point, it is a good idea to store passwords locally in your own application without going for a commercial product. Because you do not know what are the vulnerabilities exist in those products and how many hackers are targeting those applications.
If you are going to build your own tool , following are the things you need to concern.
- The Language/Tool you are going to use and its cryptographic support
- How you are going to secure the keys that are using
- Which algorithms are using and what are the key lengths
- Do we need to depend on any other 3rd party packages/ tools apart from the main development language/tool
- How you are going to persist your encrypted data(text file/DB/or in the cloud etc..)
If we take the Java as an example (I do not know how much you are familiar with it), following are the things you need to consider.
Would I lose anything from storing my passwords in a text document
No. You would not if you are using the correct algorithm.
AES 256?
If you are using Java, this is not possible because of key size restrictions are implemented in the Cipher class of Java. Either you need to depend on the Bouncycastle Cryto library or use unlimited strength JCE files. But then again you need to check your Jurisdiction laws before using this if you are planing to export your encrypted data.
My suggestion is go ahead with AES 128 because its kinda like defacto standard in the industry now.
The beast way to secure your encrypted data in your context is, using Java's object encryption using SealedObjects because I think it is an extra burden to use a DB to store your encrypted data.
Store your keys in a Javakey store becuase it is one of the best ways to store and distribute your encryption keys.
You can create a Java application which excepts the password for your Keystore and doing the encryption and decryption. You can simply create a class like follows and manage your passwords. Do a key search after you decrypt the array/list of objects.
public class PasswordStore {
private String Key;
private char[] passwd;
private Date Updated;
public String getKey() {
return Key;
}
public void setKey(String Key) {
this.Key = Key;
}
public char[] getPasswd() {
return passwd;
}
public void setPasswd(char[] passwd) {
this.passwd = passwd;
}
public Date getUpdated() {
return Updated;
}
public void setUpdated(Date Updated) {
this.Updated = Updated;
}
You can finally encrypt an object something like as follows.
private List<PasswordStore> passwords;
Keep in mind to use other secure programming techniques such as not to store your password in string variables because strings are immutable and vulnerable to memory hijacking attack.