我正在制作一个Perl模块,为第三方API提供OO接口.我希望在将用户密码传输到第三方API之前以加密格式捕获并存储用户密码.该模块仅用于在基于UNIX的系统上运行.
我已经生成了以下执行捕获功能的脚本 - 这是正确的,因为它只以加密格式存储密码变量?我担心密码可能在其他地方的内存中可用(例如在$ _下虽然$ _是undef).
NB.假设操作系统不会记录条目或在进程名称中包含密码,我使用的是STDIN而不是@ARGV.我正在使用替代正则表达式而不是chomp,因此输入不必存储在临时的非加密变量中.我还假设输入捕获软件仍然可以捕获用户的输入,这是不可能完全安全的.
提前致谢
use strict;
use warnings;
use Crypt::CBC;
use 5.14.0;
print 'Please enter your password: ';
system('tty -echo');
my $key = Crypt::CBC->random_bytes(56);
my $iv = Crypt::CBC->random_bytes(8);
my $cipher = Crypt::CBC->new(-key => $key,
-cipher => 'Blowfish',
-salt => 1,
);
my $ciphertext = $cipher->encrypt(<STDIN> =~ s/\n$//r);
system('tty echo');
Run Code Online (Sandbox Code Playgroud) 许多Perl XS代码const char *用作XS sub的返回值,但绝不仅仅char *.例如:
const char *
version(...)
CODE:
RETVAL = chromaprint_get_version();
OUTPUT: RETVAL
Run Code Online (Sandbox Code Playgroud)
来自xs-fun的代码
有人可以解释为什么const是首选吗?在我的测试中,无论是否const使用,返回的标量都是可修改的.
我已将我的stasis发行版上传到PAUSE,但它不在索引中.
我以为这是因为它没有包,所以我在v0.04中向stasis 脚本添加了一个包声明,如下所示:
#!/usr/bin/env perl
package stasis;
package main;
...
Run Code Online (Sandbox Code Playgroud)
但它仍然没有编入索引.
无论如何,这个分布索引不涉及创建样板模块文件?(例如,添加lib/stasis.pm到分发).