Java 如何在sqlite android中存储哈希密码
这是生成哈希密码的地方 试一试{ 在这里,我将散列保存为字符串并将其插入数据库 但它从未被保存。sqlite列是文本类型。我知道sqlite支持直接保存字节数组,所以我尝试使用byte[],但结果相同,在数据库中没有条目。addVault()代码没有问题,因为我用其他普通字符串和所有字符串检查过它,它工作正常。 这是密码Java 如何在sqlite android中存储哈希密码,java,android,sqlite,hash,cryptography,Java,Android,Sqlite,Hash,Cryptography,这是生成哈希密码的地方 试一试{ 在这里,我将散列保存为字符串并将其插入数据库 但它从未被保存。sqlite列是文本类型。我知道sqlite支持直接保存字节数组,所以我尝试使用byte[],但结果相同,在数据库中没有条目。addVault()代码没有问题,因为我用其他普通字符串和所有字符串检查过它,它工作正常。 这是密码 String finalKey = Arrays.toString(androCrypter.getHashedKey(v.password,"CREATE_VAULT"));
String finalKey = Arrays.toString(androCrypter.getHashedKey(v.password,"CREATE_VAULT"));
} catch (IOException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (InvalidKeySpecException e) {
e.printStackTrace();
}
boolean vaultCreationSuccessful = new TableController(context).addNewVault(finalKey,v.vaultName,v.algorithm);
但在这种情况下,我无法让它工作。没有保存任何内容。我也读过关于BLOB的文章,但我认为它不需要,因为sqlite支持byte[]。
怎么了?
任何帮助/建议都将不胜感激。谢谢
注意:请忽略getHashedKey()中的FileInputStream和FileOutputStream行
编辑:
我刚发现这个
protected boolean addNewVault(String finalKey,String vaultName,String algorithm) {
ContentValues values = new ContentValues();
values.put("Vault_Name", vaultName);
values.put("KEY", finalKey);
values.put("Algorithm", algorithm);
SQLiteDatabase db = this.getWritableDatabase();
boolean createSuccessful = db.insert(DATABASE_NAME, null, values) > 0;
db.close();
return createSuccessful;
}
代码没有被执行,这就是问题所在。我创建了另一个类只是为了检查它是否在那里工作,它确实在那里工作。
尝试了另一个方法,并像finalKey=getFinalKey(v.password)那样调用它,该方法包含上述代码,但不起作用。
我完全不知所措。请帮助。我要做的是将“byte[]”转换为字符串:
try {
finalKey = Arrays.toString(androCrypter.getHashedKey(v.password,"CREATE_VAULT"));
} catch (IOException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (InvalidKeySpecException e) {
其中,“hashAsBytes”是“getHashedKey”的结果,“hashAsString”是转换为字符串的字节数组
然后,您只需将“hashaString”保存在您的数据库中,这是您认为合适的
然后比较散列:
String hashAsString = new String(hashAsBytes,"UTF-8");
如果hashInDB等于刚刚计算的新哈希,则此方法将返回TRUE。如果哈希不匹配,则返回FALSE
希望这有帮助
最好的,Federico。我在我的sqlite应用程序中将哈希保存为字符串,效果很好,它只是文本。一些控制问题:-其他值、表或记录是否被写入?-您是否尝试过打印这些值(特别是哈希值)要在插入之前进行控制台操作?-您调试过应用程序吗?没有其他值写入任何其他表。这是一个表。是的,我已将finalKey值显示为toast,但在初始化时为null。但是,当我使用单个java代码进行检查并将其打印到控制台时,会生成哈希值。我没有调试appliHpw是否将散列保存为字符串,并将返回的值保存为字节[],你能分享一些代码/想法吗?之前已经尝试过了…我不知道为什么它不会存储在sqlite中。你直接将字符串保存到数据库中,对吗?是的,我绝对认为问题在于使用sqlite,而不是处理字符串或字节。要从Android访问sqlite,我遵循了谷歌的方法:。它工作正常。你是您的数据库是否正常工作?是的,我的数据库正常工作,因为我在前面用简单值检查了它,以确保它正常工作。好的。那么您的数据库正常工作,但没有存储简单字符串???您的代码有问题。请调试字符串存储过程。您一定有错误。我发现finalKey仍然是s我刚刚初始化了finalKey=“Hello”,后来保存了散列以覆盖它,但是我的数据库条目成功了,并且“Hello”被存储在键列的位置
String hashAsString = new String(hashAsBytes,"UTF-8");
public boolean compareHashes(String hashInDB, String hashNew){
return hashInDB.equals(hashNew);
}