在Flutter-SQLite-Dart应用程序中加密密码并保存到数据库中,涉及到几个关键步骤:密码加密、数据库操作和安全存储。以下是详细的解答:
sqflite
库进行数据库操作。在pubspec.yaml
文件中添加sqflite
和crypto
库的依赖:
dependencies:
flutter:
sdk: flutter
sqflite: ^2.0.0+4
crypto: ^3.0.1
创建一个SQLite数据库并初始化表:
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
Future<Database> initializeDatabase() async {
return openDatabase(
join(await getDatabasesPath(), 'user.db'),
onCreate: (db, version) {
return db.execute(
"CREATE TABLE users(id INTEGER PRIMARY KEY, username TEXT, passwordHash TEXT)",
);
},
version: 1,
);
}
使用crypto
库对密码进行哈希加密:
import 'package:crypto/crypto.dart';
String hashPassword(String password) {
final bytes = utf8.encode(password);
final hash = sha256.convert(bytes);
return hash.toString();
}
将加密后的密码保存到数据库中:
Future<void> saveUser(String username, String password) async {
final db = await initializeDatabase();
final passwordHash = hashPassword(password);
await db.insert(
'users',
{'username': username, 'passwordHash': passwordHash},
);
}
从数据库中读取用户信息并验证密码:
Future<bool> verifyUser(String username, String password) async {
final db = await initializeDatabase();
final user = await db.query('users', where: 'username = ?', whereArgs: [username]);
if (user.length == 0) return false;
final storedHash = user.first['passwordHash'];
final inputHash = hashPassword(password);
return storedHash == inputHash;
}
pubspec.yaml
文件中添加了正确的依赖,并且运行了flutter pub get
命令。通过以上步骤,你可以在Flutter-SQLite-Dart应用程序中安全地加密密码并保存到数据库中。
领取专属 10元无门槛券
手把手带您无忧上云