如何使用 powershell 重新排序字符串以混淆隐藏的消息?

How to use powershell to reorder a string to obfuscate a hidden message?

只是为了好玩,一个朋友和我正在尝试寻找一种创造性的方式来使用 steganography.I 向彼此发送编码消息,偶然发现了如下所示的事情,我一直在努力尝试编写一个函数来使流程自动化。

this is a secret message

can be turned into:

("{2}{1}{0}{3}"-f'ecret m','is a s','this ','essage')

拆分字符串并使用重新排序似乎是可行的方法。

我真的很挣扎 感谢帮助

纯属娱乐....

$InputMessage = 'this is a secret message'

$SplittedString = $InputMessage -split '' | Select-Object -Skip 1 | Select-Object -SkipLast 1

[array]::Reverse($SplittedString)

foreach ($Character in $SplittedString) {
    if ($Character -notin $CharacterList) {
        [array]$CharacterList += $Character
    }
}

foreach ($Character in ($InputMessage -split '' | Select-Object -Skip 1 | Select-Object -SkipLast 1)) {
    $Index = [array]::indexof($CharacterList, $Character)
    $Output += "{$Index}"
}
$Result = "'$Output' -f $(($CharacterList | ForEach-Object {"'$_'"}) -join ',')"

$Result 

输出为:

'{6}{10}{9}{3}{5}{9}{3}{5}{2}{5}{3}{0}{8}{7}{0}{6}{5}{4}{0}{3}{3}{2}{1}{0}' -f 'e','g','a','s','m',' ','t','r','c','i','h'

输出为:

this is a secret message

现在,如果您想使用它,您可以删除花括号、引号、逗号和 -f,只向数据添加数字和字符。 ;-)

不完全是你要找的东西,但这可能会给你一些开始的东西:

class Encode {
    [string] $EncodedMessage
    [int[]]  $Map
    [int]    $EncodingComplexity = 3

    Encode ([string] $Value) {
        $this.Shuffle($Value)
    }

    Encode ([string] $Value, [int] $Complexity) {
        $this.EncodingComplexity = $Complexity
        $this.Shuffle($Value)
    }

    [void] Shuffle([string] $Value) {
        $set = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()_-+=[{]};:<>|./?'
        $ref = [Collections.Generic.HashSet[int]]::new()
        $ran = [random]::new()
        $enc = [char[]]::new($Value.Length * $this.EncodingComplexity)

        for($i = 0; $i -lt $enc.Length; $i++) {
            $enc[$i] = $set[$ran.Next($set.Length)]
        }

        for($i = 0;  $i -lt $Value.Length; $i++) {
            do {
                $x = $ran.Next($enc.Length)
            } until($ref.Add($x))
            $enc[$x] = $Value[$i]
        }

        $this.EncodedMessage = [string]::new($enc)
        $this.Map = $ref
    }
}

class Decode {
    static [string] DecodeMessage ([Encode] $Object) {
        return [Decode]::DecodeMessage($Object.EncodedMessage, $Object.Map, $Object.EncodingComplexity)
    }

    static [string] DecodeMessage ([string] $EncodedMessage, [int[]] $Map) {
        return [Decode]::DecodeMessage($EncodedMessage, $Map, 3)
    }

    static [string] DecodeMessage ([string] $EncodedMessage, [int[]] $Map, [int] $Complexity) {
        $decoded = [char[]]::new($EncodedMessage.Length / $Complexity)
        for($i = 0; $i -lt $decoded.Length; $i++) {
            $decoded[$i] = $EncodedMessage[$Map[$i]]
        }
        return [string]::new($decoded)
    }
}

编码消息:

PS /> $message = 'this is a secret message'
PS /> $encoded = [Encode] $message
PS /> $encoded

EncodingComplexity EncodedMessage                                                           Map
------------------ --------------                                                           ---
                 3 B$h^elu2w#CeeHH^qa siQJ)t}es:.a3 ema=eN(GiIcsO;tst1 .fsg}eSUk7ms4 N>rfe# {49, 2, 41, 27…}

要解码消息,您可以使用 Encode 类型的对象,或者您可以将 Encoded Message 和 Map 给您的朋友对其进行解码 ;)

PS /> [Decode]::DecodeMessage($encoded)

this is a secret message

PS /> [Decode]::DecodeMessage('B$h^elu2w#CeeHH^qa siQJ)t}es:.a3 ema=eN(GiIcsO;tst1 .fsg}eSUk7ms4 N>rfe#', $encoded.Map)

this is a secret message