当前位置: 首页 > 知识库问答 >
问题:

生成AES 256位键值

益思博
2023-03-14

有人知道从任意长度的密码短语生成256位键值的方法吗?由于需要再次生成加密值并在数据库中进行比较,因此无法对加密进行加密。因此,每次加密时,值必须生成相同的加密字符串。

目前我使用的是一个32字符的密钥,假设它是256位,这可能是错误的?

那么,我想把“快速棕色狐狸”转换成一个合适的AES 256位密钥?

共有3个答案

宗政权
2023-03-14
public static string GenerateBitKey(int letterCount = 44)
    {
        // Get the number of words and letters per word.
        int num_letters = letterCount;
        // Make an array of the letters we will use.
        char[] letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".ToCharArray();

        // Make a random number generator.
        Random rand = new Random();

        // Make the words.
        // Make a word.
        string word = "";
        for (int j = 1; j <= num_letters; j++)
        {
            // Pick a random number between 0 and 25
            // to select a letter from the letters array.
            int letter_num = rand.Next(0, letters.Length - 1);

            // Append the letter.
            word += letters[letter_num];
        }
        return word;
    }
韦衡
2023-03-14

最好的方法可能是使用SHA256(将生成256位输出)和特定于应用程序的salt来使用PBKDF2

你说32字符密码短语不是256位密钥是正确的。它不包含足够的熵,有些字节甚至可能没有有效的字符表示。

朱皓
2023-03-14

您可以使用任意大小的密码构造Rfc2898DeriveBytes类,然后导出所需大小的密钥,在本例中为256位(32字节):

private static byte[] CreateKey(string password, int keyBytes = 32)
{
    const int Iterations = 300;
    var keyGenerator = new Rfc2898DeriveBytes(password, Salt, Iterations);
    return keyGenerator.GetBytes(keyBytes);
}

为了产生确定性输出(即相同的输入将产生相同的输出),您需要对salt进行硬编码。salt必须至少为8字节:

private static readonly byte[] Salt = 
    new byte[] { 10, 20, 30 , 40, 50, 60, 70, 80};
 类似资料:
  • 问题内容: 我有使用的Iterator的现有代码 带有编译警告 parameterized 我可以更新为通用版本: 但是,是不是有办法“泛型化” 带钥匙? 我找到了这个答案,但是它的建议没有编译 编辑 使用我收到类型安全警告: to conform to Iterator 同样使用Eclipse Infer泛型也不会执行任何代码更改 问题答案: 您提供的链接答案所使用的类别与您使用的类别不同。如果

  • 问题内容: 我的主键实体如下所示 当我跑步时,出现错误 无法获取或更新下一个值;嵌套的异常是org.hibernate.exception.SQLGrammerException:无法获取或更新下一个值 但是当我改变为 没有错误抛出。我想在 oracle db 上为每个表生成唯一的主键。 问题答案: 当将新创建的实体插入数据库时,告诉JPA提供者使用表从中获取ID。 当使用Hibernate作为提

  • 接口说明 生成邀请成员时生成链接的唯一键 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 API地址 GET /permissions/api/team/v1.0.0/generateTeamUniquekey 是否需要登录 是 请求字段说明 参数 类型 请求类型 是否必须 说明 token string header 是 当前登录用户的TOKEN 响应

  • 接口说明 生成邀请成员时生成链接的唯一键 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 如开启https功能,请求地址的协议应改为https,如:https://www.example.com/wish3dearth/api/access/v1.0.0/getLicenseInfo API地址 GET /permissions/api/team/v1.

  • 我正在使用Laravel4.2SchemaBuilder创建一些相互引用的表,但遇到了一些问题。 我有一个简化的ERD。请注意,仅显示相关列: 请注意,我无法以任何方式修改和表,因为我正在开发一个模块以连接到现有系统。 我正在努力实现以下目标: 表包含有关表中的行的额外信息 目前,我使用以下代码创建两个表: 表的创建脚本将导致以下SQL查询: 这反过来会导致以下错误: SQLSTATE[42000

  • 问题内容: 我想更改一个主键和所有引用此值的表行。 如果我提供脚本或功能 我想创建一个SQL代码段,该代码段在引用表“ master”的所有表上执行更新: 在自省的帮助下,这应该是可能的。 我使用postgres。 更新 问题是,有许多表具有表“ master”的外键。我想要一种自动更新所有具有主表外键的表的方法。 问题答案: 如果您需要更改PK,可以使用: SET CONSTRAINTS设置当前