executable - 在 Perl6 中创建可执行文件

标签 executable raku

我正在使用摩尔。现在可以创建 perl6 可执行文件了吗?
我有在 machineA 上开发的源代码,我想在 machineB 上运行它,它比 machineA 快大约 3 倍,但我不希望 machineB 上的人能够查看源代码。
还是我必须更改为 Java VM?
如果无法创建 perl6 可执行文件,保护公司/部门知识产权的最佳方法是什么?

最佳答案

对于简单的东西,如果您在 machineB 上自己运行它,您可以尝试在您的程序中解密源代码或解密到 STDOUT,然后将其提供给 perl6。加密和解密有很多选项,例如一次性密码、gpg,甚至可以通过 machineA 上的套接字安全地读取内容。这是一个使用 zip 和 unzip 的概念证明示例,

cat my.p6
for 1 .. 5 { say rand }
zip -e my.zip my.p6
Enter password:
Verify password:
adding: my.p6 (stored 0%)
unzip -p my.zip | perl6
[my.zip] my.p6 password:
0.6868457931159548
0.3818693072902063
0.26339483730150215
0.03617574596367301
0.1992317319783774

至于在 shell 级别使用一次性密码进行加密,将使用 script(需要 openssl 和 ssh),
./sshencdec.sh -p ~/.ssh/id_rsa.pub < my.p6 > my.p6.enc
./sshencdec.sh -s ~/.ssh/id_rsa  < my.p6.enc | perl6
Enter pass phrase for /home/david/.ssh/id_rsa:
0.4554567534399926
0.5215978159072545
0.5188661477620019
0.4928945548121154
0.2916414959794953
cat my.p6.enc
-- encrypted with https://git.e.tern.al/s2/sshencdec
-- keys
-- key
M32P8T5hAbkozzu9Hsb0UxaHMIowBnm5SGya1JdVRKM85NrsmMaO+JVICdpNCACu
0onf3xIDIdl6IRiLRmbrrG2qOHqYSqHXLLs4Yt7530IvGiDyxpGeygJwt35+PZ4T
KH6FMluenkvkHufsY1xRC2PM8kzQ0xtx9ThVNkupQavVN3SOHaMxVFZUqJCuInFl
Y8e6iMyoF7NfQ4ekUwOtpJtFjB5DzMepxg+iAetTV2E2kwAq5qUTrmkzSTd38b+X
YzdeYmngMjBPzMZ/nrBT4cE2kAYyIGUwTDMa5UsClUUBBAN6Igfxn5O6ozlq9FXk
IIujhfgAn64U2DfcYHCZ2w==
-- /key
-- /keys
U2FsdGVkX18ObEPup0W1+45UewyKoUftMzn+dUDRQp9mDCzJ0/7cVYTe6zNJINIU

所以幕后的流程是这样的,
  • 使用强密码(脚本使用 AES 256)使用 PAD 将 SECRET 加密为 SECRET.enc
  • 使用非对称加密保护 PAD 以生成 PAD.enc(本例中为 SSH + RSA)
  • 现在您将需要 SECRET.enc、PAD.enc 和私钥密码短语来执行必要的解密(脚本方便地将前两个合并到一个文件中)

  • 这在您需要共享文件时很有用(使用其他公钥,只要您能弄清楚安全 key 交换部分)

    至于程序操作方面,AFAIK 生态系统中还没有任何类似于 this 的模块,但是您可以从 here 中汲取灵感来构建自己的辅助类/模块。

    关于executable - 在 Perl6 中创建可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54065703/

    相关文章:

    r - 可以在不打开 R 环境的情况下运行 RShiny 应用程序吗?

    exception - 我应该在哪里捕获 Perl 6 警告控制异常?

    package - 如何声明可以由许多不同命名的包之一实现的依赖项?

    raku - 如何使用定义的生成器构建惰性列表,是否有 "takeWhile"替代方案?

    在源代码中创建字符串数组在可执行文件中不起作用

    输出目录中的 Delphi XE2 主机应用程序

    unix - 查询 UNIX 可执行文件

    linux - 如何在 Heroku 上为我的应用程序安装 libstdc++6?

    raku - Perl 6 Cro 的 stub 不运行 : HTTP/2 is requested, 但不支持 ALPN

    grammar - 对文件进行语法子解析