实验验收2

一、保护的资产有哪些?

  • 公文

利用sm4加密公文:

     key = get_or_generate_key(file_address) ##sm4密钥
     encrypt_and_hash_file(file_path, key, file_address)
  • 密码

利用加盐哈希保存密码:

  def sm3_hash_data(data):
  return sm3_hash(func.bytes_to_list(bytes(data, encoding='utf-8')))

获取存储的盐值

    salt = user_profile.salt

    # 计算带盐的SM3哈希值
    salted_hash_password_in = sm3_hash_with_salt(password_in, salt)
    print(salted_hash_password_in)
  • 密钥

在本系统中,首先使用sm4加密公文,然后利用sm2公钥加密sm4密钥,再利用sm3哈希后取前16个字符作为SM4密钥加密sm2私钥。

    def create_user(request):
        current_user = request.session['username']
        if request.method == 'POST':
            form = UserForm(request.POST)
            if form.is_valid():
                # 获取表单数据并保存到数据库
                id = form.cleaned_data['id']
                username = form.cleaned_data['username_up']
                email = form.cleaned_data['email']
                password = form.cleaned_data['password_up']

                # 生成随机盐值
                salt = generate_random_string(15)
                # 计算带盐的SM3哈希值
                salted_hash_password = sm3_hash_with_salt(password, salt)
                print(salted_hash_password)

                # 对加盐哈希值进行SM3运算
                sm3_hashed_password = sm3_hash_data(salted_hash_password)

                # 取前16个字符作为SM4密钥
                sm4_key = sm3_hashed_password[:16]

                priKey = PrivateKey()
                pubKey = priKey.publicKey()

                # 使用SM4加密私钥
                encrypted_private_key = sm4_encrypt(sm4_key, priKey.toString())

                # 保存到数据库中
                UserProfile.objects.create(
                    id=id,
                    username_up=username,
                    email=email,
                    password_up=salted_hash_password,  # 存储带盐的SM3哈希值
                    salt=salt,  # 存储盐值
                    public_key=pubKey.toString(compressed=False),  # 存储公钥
                    private_key=encrypted_private_key,  # 存储私钥
                    avatar='avatars/default_avatar.png'
                )

                LogData = Log.objects.create(
                    username=current_user,
                    documentname="无",
                    operation=f'用户{current_user}于{timezone.now()}创建了新用户{username}。'
                )
                LogData.save()

                # 重定向到 index 页面,使用 HttpResponseRedirect 对象
                return HttpResponseRedirect(reverse('index'))

        else:
            form = UserForm()

        return render(request, 'adduser.html', {'form': form})

二、数据库表单

用户表单

文件表单

登录表单

posted @ 2024-05-27 10:41  20211423袁艺  阅读(3)  评论(0编辑  收藏  举报