Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在sqlite android中存储哈希密码_Java_Android_Sqlite_Hash_Cryptography - Fatal编程技术网

Java 如何在sqlite android中存储哈希密码

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"));

这是生成哈希密码的地方

试一试{

在这里,我将散列保存为字符串并将其插入数据库 但它从未被保存。sqlite列是文本类型。我知道sqlite支持直接保存字节数组,所以我尝试使用byte[],但结果相同,在数据库中没有条目。addVault()代码没有问题,因为我用其他普通字符串和所有字符串检查过它,它工作正常。 这是密码

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);
}