对SQLite3数据库的一些加密解密函数

 function SQLite3_Open_UTF8(const filename:PAnsiChar; var dbHandle: Pointer ):integer;  cdecl;
         external 'sqlite3.dll' name 'sqlite3_open';
  function SQLite3_Open_UTF16(const filename:PAnsiChar;var dbHandle:Pointer):Integer;cdecl;
           external 'sqlite3.dll' name 'sqlite3_open16';
  function SQLite3_Close(dbHandle:pointer):integer;cdecl; external 'sqlite3.dll'
           name 'sqlite3_close';

  function SQLite3_Key(dbHandle:Pointer; Key:PAnsiChar; keyLen:integer ):integer;cdecl;
           external 'sqlite3.dll' name 'sqlite3_key';
  function SQLite3_ReKey(dbHandle:Pointer; Key:PAnsiChar; KeyLen:integer):integer;cdecl;
           external 'sqlite3.dll' name 'sqlite3_rekey';

具体的其它函数可以看下wxsqlite3(开源)附带的说明。

以上函数说明:

       如果数据库没有密码,现在要设置:先open数据库,再用SQLite3_ReKey设置密码;
       如果数据库有密码,现在要修改密码,则先open数据库,再用SQLite3_Key输入原来的密码
         ,再用rekey设置新密码。
      如果想把加密后的数据库变成没有加密的,则先open数据库,再用SQLite3_Key输入原来的密
      码,再用SQLite3_ReKey(pdb,nil,0)即可。
      最后用SQLite3_Close(pdb)关闭即可

转载于:https://www.cnblogs.com/yagzh2000/archive/2013/01/18/2865944.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,我可以为您介绍两种gorm sqlite数据库加密的方式: 1. 对数据库中的数据进行加密: 这种方式是将数据库中的数据进行加密,保护敏感信息。您可以使用加密算法对数据进行加密,然后存储到数据库中。在读取数据时,再进行解密操作。这种方式的优点是可以保护数据的机密性,但缺点是需要在每次读写数据时进行加解密操作,可能会影响性能。 2. 对数据库文件进行加密: 这种方式是对整个数据库文件进行加密,保护整个数据库的机密性。您可以使用加密算法对数据库文件进行加密,然后在使用时解密。这种方式的优点是可以一次性对整个数据库进行加解密,不需要在每次读写数据时进行操作,但缺点是可能会增加数据库的访问时间。 以下是两种加密方式的示例代码: 1. 对数据库中的数据进行加密: ```go import ( "gorm.io/driver/sqlite" "gorm.io/gorm" "crypto/aes" "crypto/cipher" "encoding/base64" ) // 定义加密密钥 var key = []byte("0123456789abcdef") // 定义加密函数 func encrypt(data []byte) []byte { block, _ := aes.NewCipher(key) ciphertext := make([]byte, aes.BlockSize+len(data)) iv := ciphertext[:aes.BlockSize] stream := cipher.NewCTR(block, iv) stream.XORKeyStream(ciphertext[aes.BlockSize:], data) return ciphertext } // 定义解密函数 func decrypt(ciphertext []byte) []byte { block, _ := aes.NewCipher(key) iv := ciphertext[:aes.BlockSize] ciphertext = ciphertext[aes.BlockSize:] stream := cipher.NewCTR(block, iv) stream.XORKeyStream(ciphertext, ciphertext) return ciphertext } func main() { db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{}) if err != nil { panic("failed to connect database") } // 自动迁移模式 db.AutoMigrate(&User{}) // 创建用户 user := User{Name: "Alice", Age: 18} // 加密用户数据 encryptedData := encrypt([]byte(user.Name)) user.Name = base64.StdEncoding.EncodeToString(encryptedData) // 存储用户数据 db.Create(&user) // 查询用户 var result User db.First(&result, user.ID) // 解密用户数据 decryptedData, _ := base64.StdEncoding.DecodeString(result.Name) result.Name = string(decrypt(decryptedData)) fmt.Println(result) } ``` 2. 对数据库文件进行加密: ```go import ( "gorm.io/driver/sqlite" "gorm.io/gorm" "crypto/aes" "crypto/cipher" "io/ioutil" "os" ) // 定义加密密钥 var key = []byte("0123456789abcdef") // 定义加密函数 func encryptFile(filename string) error { plaintext, err := ioutil.ReadFile(filename) if err != nil { return err } block, _ := aes.NewCipher(key) ciphertext := make([]byte, aes.BlockSize+len(plaintext)) iv := ciphertext[:aes.BlockSize] stream := cipher.NewCTR(block, iv) stream.XORKeyStream(ciphertext[aes.BlockSize:], plaintext) return ioutil.WriteFile(filename, ciphertext, os.ModePerm) } // 定义解密函数 func decryptFile(filename string) error { ciphertext, err := ioutil.ReadFile(filename) if err != nil { return err } block, _ := aes.NewCipher(key) iv := ciphertext[:aes.BlockSize] ciphertext = ciphertext[aes.BlockSize:] stream := cipher.NewCTR(block, iv) stream.XORKeyStream(ciphertext, ciphertext) return ioutil.WriteFile(filename, ciphertext, os.ModePerm) } func main() { db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{}) if err != nil { panic("failed to connect database") } // 自动迁移模式 db.AutoMigrate(&User{}) // 创建用户 user := User{Name: "Alice", Age: 18} db.Create(&user) // 加密数据库文件 err = encryptFile("gorm.db") if err != nil { panic("failed to encrypt database file") } // 解密数据库文件 err = decryptFile("gorm.db") if err != nil { panic("failed to decrypt database file") } // 查询用户 var result User db.First(&result, user.ID) fmt.Println(result) } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值