异或命令失败

问题描述 投票:0回答:1

我正在尝试创建一个用于密码学的 One Time Pad,但我遇到了一个错误

计划是

  • 生成文本
  • 生成密钥
  • 将文本和密钥从 Ascii 转换为二进制
  • 使用 Key_binary XOR text_binary 创建密码
#!/bin/bash

#Create Message #1
plaintext=`cat /dev/urandom | tr -dc 0-9 | head -c8`
sleep 1

#Generate Random Sequence
key=`cat /dev/urandom | tr -dc 0-9 | head -c8`

#Ascii to Binary Convertion
key_bin=$(echo $key | perl -lpe '$_=unpack"B*"')

plaintext_bin=$(echo $plaintext | perl -lpe '$_=unpack"B*"')

plaintext_bin_size=${#plaintext_bin}

key_bin_size=${#key_bin}


    for ((i=0; i < $plaintext_bin_size; i++)); do
        byte=$((${plaintext_bin[$i]} ^ ${key_bin[$i % $key_bin_size]}))

        cipher="$cipher($byte)"
    done

    echo -e "$cipher"

但是我明白了

    syntax error: operand expected (error token is "^ ")

bash xor
1个回答
0
投票

Bash 哽咽了:

byte=$((${plaintext_bin[$i]} ^ ${key_bin[$i % $key_bin_size]}))

...它解释为:

byte=$(( ^ ))

原因是

plaintext_bin
key_bin
不是数组,而只是字符串。要从字符串变量中提取第 N 个字符,请使用
${var:N:1}
表示法:

byte=$(( ${plaintext_bin:$i:1} ^ ${key_bin:$i % $key_bin_size:1} ))
© www.soinside.com 2019 - 2024. All rights reserved.