🔧 chore: 初始化番茄小说 API 项目结构
新增项目基础框架,包含核心 API 实现、算法模块、HTTP 处理器等完整功能模块
This commit is contained in:
commit
6981148727
107 files changed
+12463
No files matched your search
@@ -0,0 +1,85 @@
|
||||
package algos
|
||||
|
||||
// getBit 获取指定位的值
|
||||
func getBit(val uint64, pos int) uint64 {
|
||||
if val&(1<<pos) != 0 {
|
||||
return 1
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
// rotateLeft64 64位左循环移位
|
||||
func rotateLeft64(v uint64, n int) uint64 {
|
||||
r := (v << n) | (v >> (64 - n))
|
||||
return r & 0xFFFFFFFFFFFFFFFF
|
||||
}
|
||||
|
||||
// rotateRight64 64位右循环移位
|
||||
func rotateRight64(v uint64, n int) uint64 {
|
||||
r := (v << (64 - n)) | (v >> n)
|
||||
return r & 0xFFFFFFFFFFFFFFFF
|
||||
}
|
||||
|
||||
// keyExpansion 密钥扩展
|
||||
func keyExpansion(key []uint64) []uint64 {
|
||||
expandedKey := make([]uint64, 72)
|
||||
copy(expandedKey, key[:4])
|
||||
|
||||
var tmp uint64
|
||||
for i := 4; i < 72; i++ {
|
||||
tmp = rotateRight64(expandedKey[i-1], 3)
|
||||
tmp = tmp ^ expandedKey[i-3]
|
||||
tmp = tmp ^ rotateRight64(tmp, 1)
|
||||
expandedKey[i] = (^expandedKey[i-4]) ^ tmp ^ getBit(0x3DC94C3A046D678B, (i-4)%62) ^ 3
|
||||
}
|
||||
return expandedKey
|
||||
}
|
||||
|
||||
// SimonEnc Simon加密
|
||||
func SimonEnc(pt []uint64, k []uint64, c int) []uint64 {
|
||||
key := make([]uint64, 72)
|
||||
copy(key[:4], k[:4])
|
||||
key = keyExpansion(key)
|
||||
|
||||
xi := pt[0]
|
||||
xi1 := pt[1]
|
||||
|
||||
var tmp, f uint64
|
||||
for i := 0; i < 72; i++ {
|
||||
tmp = xi1
|
||||
if c == 1 {
|
||||
f = rotateLeft64(xi1, 1)
|
||||
} else {
|
||||
f = rotateLeft64(xi1, 1) & rotateLeft64(xi1, 8)
|
||||
}
|
||||
xi1 = xi ^ f ^ rotateLeft64(xi1, 2) ^ key[i]
|
||||
xi = tmp
|
||||
}
|
||||
|
||||
return []uint64{xi, xi1}
|
||||
}
|
||||
|
||||
// SimonDec Simon解密
|
||||
func SimonDec(ct []uint64, k []uint64, c int) []uint64 {
|
||||
key := make([]uint64, 72)
|
||||
copy(key[:4], k[:4])
|
||||
key = keyExpansion(key)
|
||||
|
||||
xi := ct[0]
|
||||
xi1 := ct[1]
|
||||
|
||||
var tmp, f uint64
|
||||
for i := 71; i >= 0; i-- {
|
||||
tmp = xi
|
||||
if c == 1 {
|
||||
f = rotateLeft64(xi, 1)
|
||||
} else {
|
||||
f = rotateLeft64(xi, 1) & rotateLeft64(xi, 8)
|
||||
}
|
||||
xi = xi1 ^ f ^ rotateLeft64(xi, 2) ^ key[i]
|
||||
xi1 = tmp
|
||||
}
|
||||
|
||||
return []uint64{xi, xi1}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user