Ruby China
  • Topics
  • 招聘
  • Wiki
  • 酷站
  • Gems
  • Sign Up
  • Sign In
Diewin
@w7938940
VIP
NO. 2192 / 2012-05-14

28 Topics / 479 Replies
4 Followers
2 Following
75 Favorites
To Be A Coder.
No GitHub.
  • Overview
  • Topics
  • Replies
  • Favorites
  • Following
  • Followers
  • 安利一下 TabNine 插件 at November 18, 2019

    现在内存这么便宜,8G/200 块,如果是用的 Macbook,那还有什么说的,直接换 16 寸那款 64G 版本

  • 聊聊 Web 接口设计和接口行为 at October 08, 2019

    如果用 RESTful 的风格和你说的这种是不是冲突

    {
        "code": "...",
        "message": "...",
        "details": {}
    }
    
  • 服务器被墙了怎么办 at September 19, 2019

    看过什么内容会不会有记录

  • 关于 ruby 的 rsa 公钥加密问题,请教各位大神,谢谢🙏 at September 02, 2019

    非对称加密,每次加密结果都会不一样

  • 关于 ruby 的 rsa 公钥加密问题,请教各位大神,谢谢🙏 at September 01, 2019

    尝试补全 go 的加密方法

    package main
    import (
        "crypto/rand"
        "crypto/rsa"
        "crypto/x509"
        "encoding/pem"
        "bytes"
        "encoding/base64"
        "fmt"
    )
    
    func SplitSubN(s string, n int) []string {
        sub := ""
        subs := []string{}
    
        runes := bytes.Runes([]byte(s))
        l := len(runes)
        for i, r := range runes {
            sub = sub + string(r)
            if (i + 1) % n == 0 {
                subs = append(subs, sub)
                sub = ""
            } else if (i + 1) == l {
                subs = append(subs, sub)
            }
        }
    
        return subs
    }
    
    func main() {
        data := "hello"
        const publickey = `
    -----BEGIN PUBLIC KEY-----
    MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDw8cUnDShPMYFDZkL65Y0nUyyN
    0Nqxgz6vsFEJj3I3A1nsaQBmGC1urtO9pGJkFzaXkQo7s2y+S53qdsWNufKk8U2l
    SpiGjm4WWCucJTnYpC+nMwAAd/nmQudCtH4czJOkK4m29Tv6fUmvOtcSpQzW7zL0
    47I6qkkAadGb8CAg9wIDAQAB
    -----END PUBLIC KEY-----`
        block, _ := pem.Decode([]byte(publickey))
        pubInterface, _ := x509.ParsePKIXPublicKey(block.Bytes)
        pub := pubInterface.(*rsa.PublicKey)
        partLen := pub.N.BitLen()/8 - 11
        fmt.Println(partLen)
        chunks := SplitSubN(data, partLen)
        buffer := bytes.NewBufferString("")
        for _, chunk := range chunks {
            bytes, err := rsa.EncryptPKCS1v15(rand.Reader, pub, []byte(chunk))
            if err != nil {
                fmt.Println("", err)
            }
            buffer.Write(bytes)
        }
        fmt.Println(base64.RawURLEncoding.EncodeToString(buffer.Bytes()))
    }
    
    #=> "runNVN4ZjB_Z-aA7-7ovGP4bVPNJdKpvXpR47Wn9mdvTYqhUp1z-vN_Q_mGylXH_y423cZyipKnZDEP0dTZFGMfsNhL81NOBNG981pQZ87t9_F2mnyqsoXOR6pUL7j4VQUExMsx3caeMOc_0KkQbjGGnbSvwQ9ewtH7UQBcYiUE"
    

    然后用 ruby 解密

    private_pem = <<-EOS
    -----BEGIN PRIVATE KEY-----
    MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAPDxxScNKE8xgUNm
    QvrljSdTLI3Q2rGDPq+wUQmPcjcDWexpAGYYLW6u072kYmQXNpeRCjuzbL5Lnep2
    xY258qTxTaVKmIaObhZYK5wlOdikL6czAAB3+eZC50K0fhzMk6Qribb1O/p9Sa86
    1xKlDNbvMvTjsjqqSQBp0ZvwICD3AgMBAAECgYBjForF7JtPNkS6uyuAkzbhnUsN
    Z38I0bjN9+zbyapnBXHNz8DiO78zbaKWsyvjjchdvMBAnSFzgRWIfx/vkTE/59GF
    gfn7VLbvKMYULzbkZbh8NcwNjJLfLtNXmqt973uSiNah9JTeCHQd062VI5D64QHv
    GgKMDAJ6Z2W4jSn8gQJBAPuXT0597Z3ciY6G0EHAhHrJNieDNJboUFodQlHqpTrs
    SLmGTJVswj3Su2vi7ZEPyErHjL2vdrs1hDXKFVik+rkCQQD1KrKA7xUdYRwGnIry
    CMH+uaECSmKhnZgFVg9zCSpDEaTOjenGGVuu6sXWmJKj7PZ1pFHsPrzOCSp/3Pk6
    hmEvAkBL22NeFzn9zvDquFsyeAl5vBFH+JdyqLkRcqD8cfM/wN5skcGljBVE7rTz
    4ogepNOPOHuG9dCmwYwLa9Lj11qBAkAafynZq31BtpwbztFphS7KQ++12qo8Q1cJ
    xJpY2XW61+5S8J2Cbn0tM2x8W/MFSnf8kOzVtpYbQnxYY16AR8O7AkEAkHLKWspk
    QFWRUlliBVpJg+GHe9VI7ND3wWIbV4H1kmyt08959LBpg7cZLu06PXUShwtADaE9
    42Ta3K/fSme4Tw==
    -----END PRIVATE KEY-----
    EOS
    
    s = 'KAPye436VwAqMZ6amu9UeODAh-3dhU6KNbcVXmBU-HK_geeHjyktLzOREMvWPnLcJ7mdddPwwHPEBZfaVliCFl0o9IDIUe7JfEHvmfG7limTUyii08O2b1cBu8pAnev3BxUfDJRqqh84-66Qiiur-syQQkAdnzH-wuG3DJ_UPgo'
    rsa = OpenSSL::PKey::RSA.new(private_pem)
    rsa.private_decrypt(Base64.urlsafe_decode64(s))
    

    成功解密出 hello

    然后用 ruby 加密

    public_pem = <<-EOS
    -----BEGIN PUBLIC KEY-----
    MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDw8cUnDShPMYFDZkL65Y0nUyyN
    0Nqxgz6vsFEJj3I3A1nsaQBmGC1urtO9pGJkFzaXkQo7s2y+S53qdsWNufKk8U2l
    SpiGjm4WWCucJTnYpC+nMwAAd/nmQudCtH4czJOkK4m29Tv6fUmvOtcSpQzW7zL0
    47I6qkkAadGb8CAg9wIDAQAB
    -----END PUBLIC KEY-----
    EOS
    
    data = 'hello'
    rsa = OpenSSL::PKey::RSA.new(public_pem)
    Base64.urlsafe_encode64 rsa.public_encrypt(data)
    

    用上面 ruby 的解密方法也能解密

    https://golang.org/pkg/crypto/rsa/#EncryptPKCS1v15

    https://ruby-doc.org/stdlib-2.5.1/libdoc/openssl/rdoc/OpenSSL/PKey/RSA.html#method-i-public_encrypt

    https://commondatastorage.googleapis.com/chromium-boringssl-docs/rsa.h.html#RSA_PKCS1_PADDING

    https://stackoverflow.com/questions/47981709/ruby-rsa-public-key-encryption-to-golang

    结论:你写的是对的

  • 如何简单的实现按距离排序? at August 31, 2019

    mongodb,pg 应该都有基于地理位置的查询功能

  • 找小伙伴一起开发 Ruby 增量代码覆盖率工具 at August 31, 2019

    代码自测程度是指哪些方法被修改了吗?

  • rest-client 自动转换 headers 里的参数 at August 28, 2019

    https://github.com/rest-client/rest-client/blob/master/lib/restclient/request.rb#L368

    如果 header 名是 symbol 格式会调用

    key = key.to_s.split(/_/).map(&:capitalize).join('-')

    可以改成

    heades: { 'appId' => 'xlkb' }

  • 关于实现一个近期热搜功能 at August 27, 2019

    我有个思路是定一个最小的时间间隔,比如每分钟的记录为一个 sortset,然后按需统计

    redis = Redis.current
    redis.zincrby("keyword:#{Time.now.strftime('%Y%m%d%H%M')}", 1, 'Ruby')
    
    # 前一个小时的统计
    hour = Time.now - 1.hour
    start_time = hour.beginning_of_hour
    end_time = hour.end_of_hour
    keys = start_time.to_i.step(end_time.to_i, 60).collect { |t| "keyword:#{Time.at(t).strftime('%Y%m%d%H%M')}" }
    redis.zunionstore("keyword:#{start_time.strftime('%Y%m%d%H')}", keys, aggregate: 'sum')
    
    # 前一天的统计
    day = Time.now - 1.day
    start_time = day.beginning_of_day
    end_time = day.end_of_day
    keys = start_time.to_i.step(end_time.to_i, 60 * 60).collect { |t| "keyword:#{Time.at(t).strftime('%Y%m%d%H')}" }
    redis.zunionstore("keyword:#{start_time.strftime('%Y%m%d')}", keys, aggregate: 'sum')
    
    # 近一周top10关键词
    start_time = (Time.now - 1.week).beginning_of_minute
    end_time = Time.now.end_of_minute
    keys = start_time.to_i.step(end_time.to_i, 60).collect { |t| "keyword:#{Time.at(t).strftime('%Y%m%d%H%M')}" }
    redis.zunionstore("keyword:#{start_time.strftime('%Y%m%d%H%M')}-#{end_time.strftime('%Y%m%d%H%M')}", keys, aggregate: 'sum')
    redis.zrevrange("keyword:#{start_time.strftime('%Y%m%d%H%M')}-#{end_time.strftime('%Y%m%d%H%M')}", 0, 9, with_scores: true)
    
  • 想做个卡牌游戏,做好基本架构,卡牌可以让玩家参与设计,不知道大家会不会有兴趣玩? at August 08, 2019

    平衡度如何保证

  • 求教,购买 MacBook Pro 的建议 at August 06, 2019

    拼多多现在 Apple 苹果 MacBook Pro 2019 款 15.4 英寸笔记本电脑(i7、16GB、256GB、Touch Bar) 13999 元包邮

  • 请教一个关于 rails 异步长轮询的问题。 at July 31, 2019

    可以用 https://github.com/SamSaffron/message_bus

  • ImageMagick 错误咨询 at July 05, 2019

    阿里云的 oss 是不是有 qps 限制,试试本地图片

  • ImageMagick 错误咨询 at July 05, 2019

    可以尝试sleep 10,我感觉可能是处理速度跟不上

  • 找个师傅有尝写代码,Rails 项目微信支付 at July 05, 2019

    有联系方式吗,可以聊

  • 由于在数据库表中有`model_name`,导致 ActiveRecord::Relation 以及方法全都不可用 at June 24, 2019

    https://github.com/bjones/safe_attributes

  • 有什么提取页面文本内容的 gem、方法吗? at June 07, 2019

    没有万能的方法方法吧,不同的博客布局格式都不一样

  • 一次修改外键的带数据更新的 migration at June 04, 2019

    导入过程中有新的数据怎么办,更新过程中数据有改变怎么办,数据迁移就怕中间各种意外

  • 我的黑苹果终于完美了 at May 31, 2019

    恩杰 M22

  • 开发小程序时,怎么处理 CSRF 的问题? at May 16, 2019
    • Gemfile gem 'rack-cors'

    • config/initializers/cors.rb

      Rails.application.config.middleware.insert_before 0, Rack::Cors do
      allow do
      origins '*'
      
      resource '*',
      headers: :any,
        methods: [:get, :post, :put, :patch, :delete, :options, :head]
      end
      end
      
  • 求助,ActionCable 如何作为 WebSocket 客户端来使用? at May 15, 2019

    ActionCable 客户端的库就只适用于 ActionCable 服务端的数据格式,你要想实现类似 ActionCable 那样客户端的调用,就要自己去实现订阅,发消息那几个方法。

  • 我的黑苹果终于完美了 at April 28, 2019

  • Migration add_reference 多态联合索引问题 at March 18, 2019

    不是先用 user_type 确定去那个表查吗?

  • 配置文件有可能热更新么 at March 16, 2019

    Sail 这个 gem, 还有配置后台,可以实时更改配置

  • 有用 VS Code 调试 Rails 的大神么?? at March 11, 2019

    vscode ruby 插件的调试功能类似 RubyMine 那样在行首点一下就打了一个断点,不用手动输入,作用域和变量那些都有可视化窗口可以查看,已经很强大了

  • 个推微服务网关架构实践 at March 07, 2019

    有关注一个开源 API 网关项目 GoKu API Gateway CE

  • 有用 VS Code 调试 Rails 的大神么?? at March 05, 2019

    "args": [ "server", "-p", "3001" ] 如果是调试端口的话有个debuggerPort参数

  • 集合缓存优化实践 at January 29, 2019

    我代码里面都用的 @articles,显示出来出错了

  • 集合缓存优化实践 at January 29, 2019

    Rails 5 已经有 collection cache, jbuilder 也有 collection cache

    不使用 jbuilder_cache_multi,适用于增删改不频繁,缓存整个集合

    json.cache! @user1 do
      json.partial!  'article', collection: @user2, as: :article
    end
    

    使用 jbuilder_cache_multi,缓存每个对象

    json.cache_collection! @user3 do |article|
      json.partial! 'article', article: article
    end
    

    如果对象支持 cache_key 方法就用 cache_key 做缓存的 key,获取的时候使用 Rails.cache.fetch_multi

  • 集合缓存优化实践 at January 28, 2019

    为什么不直接用 Rails.cache 的 cache_key_with_version

  • Prev
  • 1
  • 2
  • 3
  • 4
  • …
  • 14
  • 15
  • Next
关于 / RubyConf / Ruby 镜像 / RubyGems 镜像 / 活跃会员 / 组织 / API / 贡献者
由众多爱好者共同维护的 Ruby 中文社区,本站使用 Homeland 构建,并采用 Docker 部署。
服务器由 赞助 CDN 由 赞助
iOS 客户端 / Android 客户端 简体中文 / English