首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用pointycastle ()时"AES引擎未初始化“

使用pointycastle ()时"AES引擎未初始化“
EN

Stack Overflow用户
提问于 2020-08-28 17:01:56
回答 2查看 159关注 0票数 0

我想生成一个具有dynamik长度位的随机BigInt。我正在使用pointycastle包来获取一个SecureRandom BigInt。

代码语言:javascript
复制
import 'package:pointycastle/pointycastle.dart';

void main(List<String> arguments) {
  print(gen(500));
}

BigInt gen(int Bits) {
  var n = BigInt.from(1);
  var ran = SecureRandom('Fortuna');
  n = ran.nextBigInteger(Bits);
  return n;
}

这一行抛出一个异常:

代码语言:javascript
复制
n = ran.nextBigInteger(Bits);
代码语言:javascript
复制
StateError (Bad state: AES engine not initialised)

这是控制台中的完整错误:

代码语言:javascript
复制
Unhandled exception:
Bad state: AES engine not initialised
#0      AESFastEngine.processBlock 
package:pointycastle/block/aes_fast.dart:109
#1      BlockCtrRandom.nextUint8 
package:pointycastle/random/block_ctr_random.dart:55
#2      SecureRandomBase._randomBits 
package:pointycastle/…/impl/secure_random_base.dart:55

#3      SecureRandomBase.nextBigInteger 
package:pointycastle/…/impl/secure_random_base.dart:33
#4      AutoSeedBlockCtrRandom.nextBigInteger.<anonymous closure> 
package:pointycastle/random/auto_seed_block_ctr_random.dart:69
#5      AutoSeedBlockCtrRandom._autoReseedIfNeededAfter 
package:pointycastle/random/auto_seed_block_ctr_random.dart:81
#6      AutoSeedBlockCtrRandom.nextBigInteger 
package:pointycastle/random/auto_seed_block_ctr_random.dart:68
#7      FortunaRandom.nextBigInteger 
package:pointycastle/random/fortuna_random.dart:46
#8      gen 
bin\encrypt.dart:10
#9      main 
bin\encrypt.dart:4
#10     _startIsolate.<anonymous closure>  (dart:isolate-patch/isolate_patch.dart:299:32)
#11     _RawReceivePortImpl._handleMessage  (dart:isolate-patch/isolate_patch.dart:168:12)

我似乎在其他地方找不到这个错误消息的解决方案。我希望你们能帮助我。:D

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-28 18:07:37

这并不清楚,但如果我看一下项目中的示例,您似乎需要调用seed方法。下面的方法对我很有效:

代码语言:javascript
复制
import 'dart:math';
import 'dart:typed_data';

import 'package:pointycastle/pointycastle.dart';

void main(List<String> arguments) {
  print(gen(500));
}

BigInt gen(int bits) {
  final _sGen = Random.secure();
  var n = BigInt.from(1);
  var ran = SecureRandom('Fortuna');
  ran.seed(KeyParameter(
      Uint8List.fromList(List.generate(32, (_) => _sGen.nextInt(255)))));
  n = ran.nextBigInteger(bits);
  return n;
}

我的灵感来自以下示例:https://github.com/PointyCastle/pointycastle/blob/master/tutorials/examples/import-demo/import-demo-1.dart

票数 1
EN

Stack Overflow用户

发布于 2020-08-28 17:42:38

欢迎来到Stackoverflow。

当使用Pointycastle的任何部分时,你确实需要实例化实现对象。

在您的代码中使用

代码语言:javascript
复制
var ran = SecureRandom('Fortuna');

使用SecureRandom类的。

只需添加

代码语言:javascript
复制
final rnd = new SecureRandom("AES/CTR/PRNG");

有关更多问题,请参阅PointCastle SecureRandom示例:

https://github.com/PointyCastle/pointycastle/blob/master/test/random/block_ctr_random_test.dart

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63630661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档