首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用powershell重新排序字符串以混淆隐藏的消息?

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

Stack Overflow用户
提问于 2022-05-22 00:35:54
回答 2查看 362关注 0票数 1

为了好玩,我和一个朋友正试图找到一种创造性的方式,用隐写法将编码的信息发送给对方。我无意中发现了如下所示的事情,我一直在努力编写一个函数来实现这个过程的自动化。

代码语言:javascript
复制
this is a secret message

can be turned into:

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

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

因此,字符串需要在5-10个字符之间随机拆分。。

  • 原始位置的索引需要保存

  • 需要在

周围交换分叉

  • 和新索引排序,以便正确地重新排序消息

我只是一直在挣扎,我很感激你的帮助

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-05-22 02:08:44

只是为了好玩..。

代码语言:javascript
复制
$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 

这方面的产出如下:

代码语言:javascript
复制
'{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'

这方面的产出如下:

代码语言:javascript
复制
this is a secret message

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

票数 1
EN

Stack Overflow用户

发布于 2022-05-22 02:17:50

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

代码语言:javascript
复制
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)
    }
}

编码一条消息:

代码语言:javascript
复制
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类型的对象,也可以给您的朋友编码的消息和地图来解码它;)

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72334072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档