• 苹果也用 Rails at 2015年07月15日

    s ankak ucomplex.c om

    也是 rails 呢...

  • 来段小清醒的代码 at 2014年05月07日

    palindrome

  • 把 transaction 牵涉到的所有数据放到同一个文档中, 用原子操作就可以了, 如果没法做到, 请不要用 mongodb. 或者自己用文件锁实现逻辑事务也可以. 如果部署到多台机器, 那你可以在一个挂载的公共磁盘上锁... 最后还是直接用关系数据库方便...

  • #2 楼 @ericguo 额我之前写的有点问题, encrypt 应该在 new 以后, 设定 key 和 iv 之前调用..

  • 这个 iv 是 128 位的 base64, 不适合用做 aes-256 的 iv

    aes 有很多变种的, ruby 中用标准库 openssl 的 aes 就和 mcrypt 的算法一致了

    require 'openssl'
    aes = OpenSSL::Cipher::AES256.new('CBC').encrypt
    aes.key = "aee18b71a9c35809baa8aa8f61fe6d8e"
    p aes.random_iv # "nYV\xAFj\xF6\x98\x95\xDA4\xE7\xE9\xAD\x90}2"
    
    message = "hello;world"
    enc = aes.update(message) << aes.final
    p enc # "hX\xCB\r3\x12\xC4\x840\xDB\xF4\x8F\xCBzJ\xD2"
    

    对应的 php 大概是这样

    <?php
    $str = "hX\xCB\r3\x12\xC4\x840\xDB\xF4\x8F\xCBzJ\xD2";
    $key = "aee18b71a9c35809baa8aa8f61fe6d8e";
    $iv = "nYV\xAFj\xF6\x98\x95\xDA4\xE7\xE9\xAD\x90}2";
    $message = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $str, MCRYPT_MODE_CBC, $iv);
    ?>
    
  • 关于字节处理 at 2014年04月18日

    #2 楼 @sforce100

    是显示的问题, 或者你可以 101.chr.encode('utf-16be').force_encoding 'binary' 看看

    ruby 是用 string 类型表示的

  • 关于字节处理 at 2014年04月18日
    101.chr.encode 'utf-16be' # "\x00\x65"
    "\x00\x65".unpack('H*').first # "0065"
    "0065".gsub(/(..)/, '\x\1') # '\x00\x65'
    
  • #5 楼 @seamon md5 可以表示成 32 个 16 进制 数字而不是任意 ascii 字符, 排列数约 3.40E38, 但是由于 birthday paradox, 网盘里如果总共有 2.2E19 个文件 (目前应该达不到这么多), 就有 50% 的几率出现 md5 相同的文件, 另外由于 md5 hash 长度比较短, 人为制造相同的哈希需要的计算量, 远比穷举哈希空间需要的计算量少得多, 别说 "不可能". 虽然网盘还可以进一步对 md5 相同的文件做内容比较再决定是否合并, 但涉及安全的地方别用 md5 是常识才对...

  • #13 楼 @small_fish__ brew update