小编Mar*_*ter的帖子

用于eval的Stringify数组

我正在准备一个将被eval编辑的字符串.该字符串将包含从现有构建的子句Array.我有以下内容:

def stringify(arg)
    return "[ '" + arg.join("', '") + "' ]" if arg.class == Array
    "'#{arg}'"
end

a = [ 'a', 'b', 'c' ]
eval_str = 'p ' + stringify(a)
eval(eval_str)
Run Code Online (Sandbox Code Playgroud)

它打印字符串["a", "b", "c"].

有没有比较惯用的方法呢?Array#to_s不削减它.有没有办法将p方法的输出分配给变量?

谢谢!

ruby

3
推荐指数
1
解决办法
4317
查看次数

任何类Unix系统是否都意味着目录上的SUID位?

正如标题所说,任何类似Unix的系统都会对目录中的SUID位赋予意义,如果是这样,它意味着什么?

SVTX(保存的文本或粘滞)位有一个含义 - 除非您可以写入该文件,否则不能从该目录中删除文件.例如,它用在/ tmp上.

SGID(设置GID)位具有含义 - 在此目录中创建的文件应属于拥有该目录的组(尽管稍后可通过显式调用chown(2)来更改该分配).

SUID位怎么样?

unix linux macos freebsd setuid

3
推荐指数
1
解决办法
1390
查看次数

在Ruby中模仿AES_ENCRYPT和AES_DECRYPT函数

我需要模仿MySQL在使用内置函数AES_ENCRYPT()和AES_DECRYPT()加密和解密字符串时所做的事情.

我已经阅读了几篇博文,显然MySQL使用AES 128位加密来实现这些功能.最重要的是,由于此加密需要16位密钥,因此MySQL会使用x0字符(\ 0s)填充字符串,直到它的大小为16位.

从MySQL源代码中的C算法在这里被发现.

现在我需要复制MySQL在Rails应用程序中所做的事情,但我尝试过的每一件事都不起作用.

这是一种复制我得到的行为的方法:

1)创建一个新的Rails应用程序

rails encryption-test
cd encryption-test
Run Code Online (Sandbox Code Playgroud)

2)创建一个新的脚手架

script/generate scaffold user name:string password:binary
Run Code Online (Sandbox Code Playgroud)

3)编辑config/database.yml并添加测试MySQL数据库

development:
    adapter: mysql
    host: localhost
    database: test
    user: <<user>>
    password: <<password>>
Run Code Online (Sandbox Code Playgroud)

4)运行迁移

rake db:migrate
Run Code Online (Sandbox Code Playgroud)

5)进入控制台,创建用户并从MySQL查询更新其密码

script/console
Loading development environment (Rails 2.2.2)
>> User.create(:name => "John Doe")
>> key = "82pjd12398JKBSDIGUSisahdoahOUASDHsdapdjqwjeASIduAsdh078asdASD087asdADSsdjhA7809asdajhADSs"
>> ActiveRecord::Base.connection.execute("UPDATE users SET password = AES_ENCRYPT('password', '#{key}') WHERE name='John Doe'")
Run Code Online (Sandbox Code Playgroud)

这就是我被卡住的地方.如果我试图解密它,使用MySQL它的工作原理:

>> loaded_user = User.find_by_sql("SELECT AES_DECRYPT(password, '#{key}') AS password FROM users WHERE id=1").first
>> loaded_user['password']
=> "password"
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试使用OpenSSL库,我无法使其工作: …

ruby encryption openssl aes

2
推荐指数
1
解决办法
4174
查看次数

标签 统计

ruby ×2

aes ×1

encryption ×1

freebsd ×1

linux ×1

macos ×1

openssl ×1

setuid ×1

unix ×1