我使用scrypt来生成密钥派生,但问题是输出大于256位,我想在具有256位密钥的AES-GCM中使用它。那我该怎么办呢?我想在Android上制作应用程序。
编辑: 我很抱歉没有给你更多信息 好吧..我正在使用的图书馆就是这个 https://github.com/wg/scrypt
这是我得到的输出
" $ $ S0 $ e0801 == eX8cPtmLjKSrZBJszHIuZA $ vapd0u4tYVdOXOlcIkFmrOEIr1Ml2Ue1l2 + FVOJgbcI ="
这比AES engin可以处理的还要多,我怎么能用呢
答案 0 :(得分:2)
Scrypt是密钥派生算法。这意味着您可以使用它来生成任意数量的伪随机字节。
在wg库中,执行此操作的方法是调用Scrypt.scrypt function:
byte[] key = Scrypt.scrypt(password, salt, N, r, p, 32);
这将为您提供所需的 32 字节的密钥材料。
你的困惑是可以理解的。 wg/scrypt的文档未提及scrypt的真实使用。他们只记录使用密码存储算法。
这就是你错误地调用 ScryptUtil.scrypt (而不是 Scrypt.scrypt )的原因:
string hash = ScryptUtil.scrypt(password, N, r, p);
该方法返回一个字符串,不适合AES(或任何其他类型)加密的密钥。