首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从密钥中获取KCV

如何从密钥中获取KCV
EN

Cryptography用户
提问于 2013-11-22 14:17:24
回答 2查看 20.9K关注 0票数 9

简单的问题:我们有AES 128加密和一个密钥。如何计算密钥检查值(KCV)?

一个例子是48C3B4286FF421A4A328E68AD9E542A4和KCV应该是77DC84。

我正在C#上试用,但对于一个密码学新手来说,还有很多“未知数”。

编辑:有一个问题,为什么我需要它-假设我有一堆密钥-KCV组合,写下来的多个用户在我们的组织,但有些密钥是无效的(雇员写8,而不是B,1,而不是7,等等)。所以我需要一个程序,它会改变键中的一些字节,然后计算出KCV。如果键有一个错误的字节,那么它是以2ms计算的,对于两个错误的字节(5秒),对于三个错误的字节(每小时半),等等。

EN

回答 2

Cryptography用户

回答已采纳

发布于 2013-11-22 14:32:17

为了计算AES的KCV,在密钥下取前三个字节的零加密。

实际上,您给出的情况正是这样的--在密钥48C3B4286FF421A4A328E68AD9E542A4下加密的零向量是77dc841daeb43315fed9acdf2f965f45,它限制在77dc84上。

在你的问题中,你说你已经有了AES-128加密,在这一点上计算KCV不应该是一个问题。我不会问你为什么要计算一个KCV,但我要提醒你,也许有更好的方法来实现你的实际目标。带有此标记的其他条款提供了关于它们的好处的合理讨论。

票数 3
EN

Cryptography用户

发布于 2013-11-25 11:26:47

如果有人需要,可以使用C#代码来计算KCV (您只需要GetKcv返回值的前三个字节):

代码语言:javascript
运行
复制
class Aes
{
    private readonly byte[] _iv;
    private readonly int _secretLength;
    private readonly byte[] _secret;
    private readonly RijndaelManaged _cryptoEngine;

    public Aes()
    {
        _iv = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

        _secretLength = 8;
        _secret = new byte[_secretLength];
        for (int i = 0; i < _secretLength; i++)
        {
            _secret[i] = 0;
        }

        _cryptoEngine = new RijndaelManaged
        {
            Padding = PaddingMode.Zeros,
            Mode = CipherMode.ECB,
            KeySize = 128,
            BlockSize = 128
        };
    }

    public byte[] GetKcv(byte[] key)
    {
        byte[] result;
        using (var memoryStream = new MemoryStream())
        {
            using (var cryptoStream = new CryptoStream(memoryStream, _cryptoEngine.CreateEncryptor(key, _iv), CryptoStreamMode.Write))
            {
                cryptoStream.Write(_secret, 0, _secretLength);
                cryptoStream.FlushFinalBlock();

                result = memoryStream.ToArray();
            }
        }

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

https://crypto.stackexchange.com/questions/11872

复制
相关文章

相似问题

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