# SqlMap配置文件及SqlTemplate模板加密存储及解析
出于系统信息安全的原因,一些大公司有自己的信息安全规范。其中就有类似这样的配置文件不允许明文存储的需求,本orm定制版本也内置了一些API对SqlMap配置文件及SqlTemplate模板密文存储解析的需求进行支持。
* 本库内置提供了AES,DES,3DES,RSA四种加密算法支持SqlMap配置文件及SqlTemplate模板加解密存储解析功能。其中,AES,DES,3DES和标准实现略有不同,如不提供key,本库会提供了一个内置key,当然您也可以设置自己的key。RSA支持公钥加密私钥解密和私钥加密公钥解密两种模式。
~~~
//内置4种加密算法如下
type AesEncrypt struct {
PubKey string
}
type DesEncrypt struct {
PubKey string
}
type TripleDesEncrypt struct {
PubKey string
}
//RSA加密解密算法支持公钥加密私钥解密和私钥加密公钥解密两种模式,请合理设置DecryptMode
type RsaEncrypt struct {
PubKey string
PriKey string
pubkey *rsa.PublicKey
prikey *rsa.PrivateKey
EncryptMode int
DecryptMode int
}
const (
RSA_PUBKEY_ENCRYPT_MODE = iota //RSA公钥加密
RSA_PUBKEY_DECRYPT_MODE //RSA公钥解密
RSA_PRIKEY_ENCRYPT_MODE //RSA私钥加密
RSA_PRIKEY_DECRYPT_MODE //RSA私钥解密
)
~~~
* 除以上4种内置加解密算法外,本库也支持自定义加解密算法功能,您也可以使用自己实现的加密解密算法,只需要实现Cipher接口即可。
~~~
//如需使用自定义的加密解密算法,只需实现Cipher接口即可
type Cipher interface {
Encrypt(strMsg string) ([]byte, error)
Decrypt(src []byte) (decrypted []byte, err error)
}
//SqlMapOptions中的Cipher实现了加密和解密方法
type SqlMapOptions struct {
Capacity uint
Extension string
Cipher Cipher
}
//SqlTemplateOptions中的Cipher实现了加密和解密方法
type SqlTemplateOptions struct {
Capacity uint
Extension string
Cipher Cipher
}
~~~
* 本库还提供一个批量配置文件加密工具,采用sciter的Golang绑定库实现。工具传送门:[xorm tools](https://github.com/xormplus/tools)。
* 内存中缓存的是经指定解密算法解密之后的配置文件内容或模板内容。
* SqlMap配置文件及SqlTemplate模板加密存储及解析具体示例如下:
~~~
//如需使用自定义的加密解密算法,只需实现Cipher接口即可
type Cipher interface {
Encrypt(strMsg string) ([]byte, error)
Decrypt(src []byte) (decrypted []byte, err error)
}
//SqlMapOptions中的Cipher实现了加密和解密方法
type SqlMapOptions struct {
Capacity uint
Extension string
Cipher Cipher
}
//SqlTemplateOptions中的Cipher实现了加密和解密方法
type SqlTemplateOptions struct {
Capacity uint
Extension string
Cipher Cipher
}
//如现在我们已经使用3DES加密了SqlMap配置文件和SqlTemplate模板,则xorm初始化方式如下
var err error
engine, err = xorm.NewPostgreSQL("postgres://postgres:root@localhost:5432/mblog?sslmode=disable")
if err != nil {
t.Fatal(err)
}
enc := &xorm.AesEncrypt{
PubKey: "122334",
}
//如自定义加解密算法,则此处传入的enc为自己实现的加解密算法,后续代码与本示例一致
err = x.RegisterSqlMap(xorm.Xml("./sql/aes", ".xml"), enc)
if err != nil {
t.Fatal(err)
}
//这里也可以new其他加密解密算法,SqlMap配置文件和SqlTemplate模板的加密结算算法可不相同
err = x.RegisterSqlTemplate(xorm.Pongo2("./sql/aes", ".stpl"), enc)
if err != nil {
t.Fatal(err)
}
//内置4种加密算法如下
type AesEncrypt struct {
PubKey string
}
type DesEncrypt struct {
PubKey string
}
type TripleDesEncrypt struct {
PubKey string
}
//RSA加密解密算法支持公钥加密私钥解密和私钥加密公钥解密两种模式,请合理设置DecryptMode
type RsaEncrypt struct {
PubKey string
PriKey string
pubkey *rsa.PublicKey
prikey *rsa.PrivateKey
EncryptMode int
DecryptMode int
}
const (
RSA_PUBKEY_ENCRYPT_MODE = iota //RSA公钥加密
RSA_PUBKEY_DECRYPT_MODE //RSA公钥解密
RSA_PRIKEY_ENCRYPT_MODE //RSA私钥加密
RSA_PRIKEY_DECRYPT_MODE //RSA私钥解密
)
//RSA使用示例
pukeyStr := `-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyqyVCWQBeIgY4FyLnrA1
viOq9m++OyUwXIvpEH7zN7MjeJp7nSK5PBkvv81zIbQrMQXQzTuE52QjYfMfHVoq
FyK+Qxw+B/1qY3TACj8b4TlDS0IrII9u1QBRhGHmtmqJ5c6As/rIqYLQCdbmycC0
3iKBM8990Pff8uq+jqzsoQCFDexZClprR6Vbz3S1ejoFLuDUAXUfNrsudQ/7it3s
Vn540kh4a9MKeSOg68TSmKKQe1huTF03uDAdPuDveFpVU/l7nETH8mFoW06QvvJR
6Dh6FC9LzJA6EOK4fNGeDzJg9e2jByng/ubJM6WeU29uri2zwnMGQ3qsCuGMXBS/
yQIDAQAB
-----END PUBLIC KEY-----`
var err error
engine, err = xorm.NewPostgreSQL("postgres://postgres:root@localhost:5432/mblog?sslmode=disable")
if err != nil {
t.Fatal(err)
}
//公钥解密
enc := new(xorm.RsaEncrypt)
enc.PubKey = pukeyStr
enc.DecryptMode = xorm.RSA_PUBKEY_DECRYPT_MODE
err = engine.RegisterSqlMap(xorm.Xml("./sql/rsa", ".xml"), enc)
if err != nil {
t.Fatal(err)
}
err = engine.RegisterSqlTemplate(xorm.Pongo2("./sql/rsa", ".stpl"), enc)
if err != nil {
t.Fatal(err)
}
~~~
* 其他相关API
~~~
/*----------------------------------------------------------------------------------------------------
1.ClearSqlMapCipher()可清除SqlMap中设置的Cipher,这样可以使用engine.LoadSqlMap(filepath)手工加载一些没有加密的配置文件
2.如果您之后又想加载一些其他加密算法存储的配置文件,也可以先清除,再重新SetSqlMapCipher()之后加载
3.当然,配置文件也可以不加密存储,遇到需要部分加密存储的配置文件可以手工调用SetSqlMapCipher()之后加载
4.注意InitSqlMap()是对整个SqlMapRootDir做统一操作,如您有区别对待的配置文件,请自行设置隔离目录,使用ClearSqlMapCipher()或SetSqlMapCipher()后调用LoadSqlMap()方法进行指定处理。
----------------------------------------------------------------------------------------------------*/
engine.ClearSqlMapCipher()
engine.SetSqlMapCipher(cipher)
/*----------------------------------------------------------------------------------------------------
1.ClearSqlTemplateCipher()可清除SqlTemplate中设置的Cipher,这样可以使用engine.LoadSqlTemplate(filepath)手工加载一些没有加密的模板文件
2.如果您之后又想加载一些其他加密算法存储的模板文件,也可以先清除,再重新SetSqlTemplateCipher()之后加载
3.当然,配置文件也可以不加密存储,遇到需要部分加密存储的配置文件可以手工调用SetSqlTemplateCipher()之后加载
4.注意InitSqlMap()是对整个SqlTemplateRootDir做统一操作,如您有区别对待的配置文件,请自行设置隔离目录,使用ClearSqlTemplateCipher()或SetSqlTemplateCipher()后调用LoadSqlTemplate()方法进行指定处理。
----------------------------------------------------------------------------------------------------*/
engine.ClearSqlTemplateCipher()
engine.SetSqlTemplateCipher(cipher)
~~~
- xorm
- 创建Orm引擎
- 定义表结构体
- 名称映射规则
- 前缀映射,后缀映射和缓存映射
- 使用Table和Tag改变名称映射
- Column属性定义
- 表结构操作
- 获取数据库信息
- 表操作
- 创建索引和唯一索引
- 同步数据库结构
- 导入导出SQL脚本
- SqlMap及SqlTemplate模板
- 初始化SqlMap配置文件及SqlTemplate模板
- SqlMap及SqlTemplate相关功能API
- SqlMap配置文件及SqlTemplate模板加密存储及解析
- 手动管理SqlMap配置及SqlTemplate模板
- 插入数据
- ORM方式插入数据
- 执行SQL命令插入数据
- 创建时间Created
- 查询和统计数据
- ORM方式查询和统计数据
- 查询条件方法
- 临时开关方法
- Get方法
- Find方法
- Join的使用
- Iterate方法
- Count方法
- Rows方法
- Sum系列方法
- Exist方法
- 子查询
- 执行SQL查询
- 执行SQL查询的11种常用方式
- 查询返回json或xml字符串
- 链式查询据操返回某条记录的某个字段的值
- SqlTemplateClient执行过程
- 关于数据库分页查询
- 更新数据
- ORM方式更新数据
- Update方法
- 乐观锁Version
- 更新时间Updated
- 执行SQL命令更新数据
- 删除数据
- ORM方式删除数据
- Delete方法
- 软删除Deleted
- 执行SQL命令删除数据
- 事务处理
- 简单事务模型
- 嵌套事务模型
- 八种事务类型及事务传播机制
- 简单事务相关API
- 嵌套事务相关API
- 嵌套事务示例代码
- 主从数据库(Master/Slave)读写分离
- 创建引擎组
- 负载策略
- 引擎组其他配置方法
- 数据库读写分离
- 批量混合SQL操作
- SQL Builder
- 缓存
- 事件
- 数据导出
- Dump数据库结构和数据
- 查询结果集导出csv、tsv、xml、json、xlsx、yaml、html
- 多Sheet页数据导出
- 日志
- 连接池
- xorm 工具
- 常见问题
- 感谢支持