7f7b585ffb
- 在应用程序中新增对达梦数据库(DM)的配置和连接支持 - 实现 SetDmDB 函数以配置达梦数据库连接 - 更新数据库操作逻辑,支持达梦特有的 SQL 语法和功能 - 在相关文件中添加达梦数据库的处理逻辑,包括表创建、数据插入和查询 - 更新 go.mod 和 go.sum 文件以引入达梦数据库驱动 - 增强文档,详细说明达梦数据库的配置和使用方法
70 lines
1.5 KiB
Go
70 lines
1.5 KiB
Go
/*
|
|
* Copyright (c) 2000-2018, 达梦数据库有限公司.
|
|
* All rights reserved.
|
|
*/
|
|
|
|
// go官方没有实现ecb加密模式
|
|
package security
|
|
|
|
import (
|
|
"crypto/cipher"
|
|
)
|
|
|
|
type ecb struct {
|
|
b cipher.Block
|
|
blockSize int
|
|
}
|
|
|
|
func newECB(b cipher.Block) *ecb {
|
|
return &ecb{
|
|
b: b,
|
|
blockSize: b.BlockSize(),
|
|
}
|
|
}
|
|
|
|
type ecbEncrypter ecb
|
|
|
|
func NewECBEncrypter(b cipher.Block) cipher.BlockMode {
|
|
return (*ecbEncrypter)(newECB(b))
|
|
}
|
|
|
|
func (x *ecbEncrypter) BlockSize() int { return x.blockSize }
|
|
|
|
func (x *ecbEncrypter) CryptBlocks(dst, src []byte) {
|
|
if len(src)%x.blockSize != 0 {
|
|
panic("dm/security: input not full blocks")
|
|
}
|
|
if len(dst) < len(src) {
|
|
panic("dm/security: output smaller than input")
|
|
}
|
|
if InexactOverlap(dst[:len(src)], src) {
|
|
panic("dm/security: invalid buffer overlap")
|
|
}
|
|
for bs, be := 0, x.blockSize; bs < len(src); bs, be = bs+x.blockSize, be+x.blockSize {
|
|
x.b.Encrypt(dst[bs:be], src[bs:be])
|
|
}
|
|
}
|
|
|
|
type ecbDecrypter ecb
|
|
|
|
func NewECBDecrypter(b cipher.Block) cipher.BlockMode {
|
|
return (*ecbDecrypter)(newECB(b))
|
|
}
|
|
|
|
func (x *ecbDecrypter) BlockSize() int { return x.blockSize }
|
|
|
|
func (x *ecbDecrypter) CryptBlocks(dst, src []byte) {
|
|
if len(src)%x.blockSize != 0 {
|
|
panic("dm/security: input not full blocks")
|
|
}
|
|
if len(dst) < len(src) {
|
|
panic("dm/security: output smaller than input")
|
|
}
|
|
if InexactOverlap(dst[:len(src)], src) {
|
|
panic("dm/security: invalid buffer overlap")
|
|
}
|
|
for bs, be := 0, x.blockSize; bs < len(src); bs, be = bs+x.blockSize, be+x.blockSize {
|
|
x.b.Decrypt(dst[bs:be], src[bs:be])
|
|
}
|
|
}
|