【问题标题】:How to make OAuth nonce in Dart如何在 Dart 中制作 OAuth 随机数
【发布时间】:2014-09-04 10:06:34
【问题描述】:

现在,我在 dart 中为 twitter 制作 OAuth 程序。

但是,我无法创建 oauth_nonce。

首先,我想这段代码。

String create_nonce(){
    var rnd = new Random();
    int i = 0;
    var number = rnd.nextInt(pow(2,8*4));
    List<int> listi = UTF8.encode(number.toString());
    String str = "";
    while(i < 3){
        number = rnd.nextInt(pow(2,8*4)); 
        if(number < pow(2,8*4) - 1){
            number = rnd.nextInt(pow(2,8*4));
       }
       listi = UTF8.encode(number.toString());
       str = str + CryptoUtils.bytesToBase64(listi);
       i++;
    }
    return str;
}

但是,此方法无法创建预期的字符串。

请告诉我如何制作 oauth_nonce。

Nonce oauth_nonce 参数是您的应用程序的唯一令牌 应该为每个独特的请求生成。 Twitter 将使用此值 确定一个请求是否已被多次提交。这 此请求的值是通过 base64 编码 32 字节生成的 随机数据,并去除所有非单词字符,但任何 产生相对随机的字母数字字符串的方法应该 在这里没事。

oauth_nonce kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg

【问题讨论】:

  • 请提供更多信息。例如,到目前为止您已经尝试过什么以及没有按预期工作。
  • 您是否从其他地方移植了此代码?有原文链接吗?任何错误消息或信息,预期的字符串应该是什么样子以及它的实际外观如何?
  • 此方法返回字符串包含不可接受的字母,“=”。这个方法是我自己想出来的。
  • 任何指向描述或要求的链接 create_nounce 应该做什么?
  • this page 有关于 oauth_nonce 的描述。

标签: twitter oauth dart


【解决方案1】:
import 'dart:math' as math;
import 'package:crypto/crypto.dart';


void main() {
  math.Random rnd = new math.Random();

  List<int> values = new List<int>.generate(32, (i) => rnd.nextInt(256));
  print(CryptoUtils.bytesToBase64(values));
}

生产

QqPlpI8BmDk9byWDqJ4tBCMMIWv24v4WL5KZsufnWqQ=

我不确定这到底是什么意思

并去除所有非单词字符

我找到https://dev.twitter.com/discussions/12445

您只是想确保您没有发送“!”之类的字符oauth_nonce 中的“#”或“$”。您建议的过程听起来会很好。

.

Base64 包括“+”和“/”。您可能需要去掉它们,因为它们是非单词字符。

应该这样做

import 'dart:math' as math;
import 'package:crypto/crypto.dart';

void main() {
  math.Random rnd = new math.Random();

  List<int> values = new List<int>.generate(32, (i) => rnd.nextInt(256));
  print(CryptoUtils.bytesToBase64(values).replaceAll(new RegExp('[=/+]'), ''));
}

replaceAll之前和之后

elrA+4rWr4O3zNv0L57iOLqTQD94abJ23hFoK+hk6QE=
elrA4rWr4O3zNv0L57iOLqTQD94abJ23hFoKhk6QE

【讨论】:

  • 我可以使用这种方法制作 oauth_nonce。非常感谢
  • 这就是你想要的?太好了!
  • CryptoUtils.bytesToBase64 现已弃用,应替换为 base64UrlEncode 包中的 dart:convert => import 'dart:convert';
【解决方案2】:

有一个包。它会自动生成随机数: https://pub.dev/packages/nonce

【讨论】:

    猜你喜欢
    • 2012-07-25
    • 1970-01-01
    • 2015-11-14
    • 2012-04-20
    • 1970-01-01
    • 1970-01-01
    • 2020-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多