異或加密是密碼學中一種簡單的加密演算法,常作為更為復雜的加密演算法的組成部分,
原理
異或運算:首先異或表示當兩個數用二進制表示,進行異或運算時,當前位的兩個二進制不同則為1相同則為0,
A ⊕ 0 = A
A ⊕ A = 0
A ⊕ B ⊕ B = A
文本的每個字符可以通過與給定的密鑰進行按位異或運算來加密,如果要解密,只需要將加密后的結果與密鑰再次進行按位異或運算即可,

代碼實踐
golang
func main() {
key := []byte{0x93, 0x44, 0x47, 0xa1, 0x13, 0x3d, 0x34, 0x23, 0xb1, 0x42, 0x11}
cipher := enc("you are a good person",key)
fmt.Println(cipher)
fmt.Println(dec(cipher,key))
}
func enc(src string, key []byte) string {
var result string
j := 0
s := ""
bt := []rune(src)
for i := 0; i < len(bt); i++ {
s = strconv.FormatInt(int64(byte(bt[i])^key[j]), 16)
if len(s) == 1 {
s = "0" + s
}
result = result + (s)
j = (j + 1) % len(key)
}
return result
}
func dec(src string, key []byte) string {
var result string
var s int64
j := 0
bt := []rune(src)
for i := 0; i < len(src)/2; i++ {
s, _ = strconv.ParseInt(string(bt[i*2:i*2+2]), 16, 0)
result = result + string(byte(s)^key[j])
j = (j + 1) % len(key)
}
return result
}
php
$key = "this is the key";
$content = "you are a good person";
$cipher = enc($content,$key);
var_dump($cipher);
echo dec($cipher, $key);
function enc($str,$key){
return str_replace('=','',base64_encode($str ^ $key));
}
function dec($str,$key){
return base64_decode($str) ^ $key;
}
異或密碼值得使用的原因主要是其易于實作,而且計算成本小,簡單重復異或加密有時用于不需要特別安全的情況下來隱藏資訊,
如果使用不斷重復的密鑰,利用頻率分析就可以破解這種簡單的異或密碼,一旦訊息的內容被猜出或知道,密鑰就會泄露,
如果密鑰是隨機的(不重復),異或密碼就會更為安全,若密鑰是真正隨機的,結果就是一次性密碼本,這種密碼在理論上是不可破解的,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/228365.html
標籤:Go
上一篇:我的go練手專案--使用go實作“洗掉sql里面的注釋和字串”功能
下一篇:Golang性能分析與優化
