当前位置: 首页 > news >正文

基于RSA的数字签名设计与实现

信息安全课程的第二个实验,主要是用java、js,前端页面用的html写的。

页面成果展示:

基本公私钥生成

实验环境为win10系统,使用git命令行工具——git bash生成公私钥。生成私钥,密钥长度为1024bit并从私钥中提取公钥

生成私钥为:

生成公钥为:

项目结构

项目代码

下图仅展示部分,完整代码在-->基于RSA的数字签名设计与实现,民大计科信息安全实验课-Java文档类资源-CSDN下载

CSDN的资源上传机制有点儿恶心

js

// 私钥
        var PRIVATE_KEY = "MIICXAIBAAKBgQDEhB7aS6mIsLO/istzfO76pwn2yf1xvR/m8ar2kRzxOpeR5aRJ\n" +
            "z4GRRL54gfAQoltC8yeUZJhkTm0/t1Lm1sGu6wbA/FTG6WuzoKIv1y9/K8eQlFtF\n" +
            "94SNYWZZY+ysjal7qUQ/2IxgQ2ir5csRcs0o7n0xfBwc7a+THW/yZc7fWwIDAQAB\n" +
            "AoGAJQ8hXltcakmgbCO5gFr0GlK7301yPSvEQ2IZsovlIFzDTqE23TCDp6iGHuWq\n" +
            "JwjnGvYN5b8eufPMSHLC8INZXNVL0bLuUHarTgzYM3xaV2qMQcFX/hLyTpUkgKXK\n" +
            "9BF6Qntm0mKtNelHv32kKM+/FZCXn5UidonQjr67Cik/i1kCQQD00mk699HTBGyG\n" +
            "fcVSCQRrv+zC69kiTv/5pUJiIVEmV559B7cfAVOV0UPWLChUgie3Oadj+QqVFygz\n" +
            "MkRyf2AXAkEAzX0W2AtWYT8j9/rwxkcRHOAMwwDI7U/eUv9Wt1D70mcOCxacnsoc\n" +
            "Q+rd1K1MFxDqz3a9bX87xILyWwf98MohXQJAe4HiwHLhEZl7vmWYtAgEiO8r3DHr\n" +
            "OpmsHR833BV+wN8W/3By+1tJ9Zy6okNonSmEK7UUMyUiJ5ClIR7M1Q5ZRQJAOlQ2\n" +
            "ps7ZDzOoFx0hOXc00Vh75uKTJmHUfwTB7blMMhZUsysQ/DXsvg6uN0+V2LpRnOBc\n" +
            "tvc11PtCpjpnh/EodQJBAIA65DZFtGnzdINxrGDdf2dt6Z5L7gSpi/SToLh5Nsfh\n" +
            "PE0jA3/DshNCwv7CpAhShItlO+nOnnACeBa8MYOmzWE=";
// 公钥
        var PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDEhB7aS6mIsLO/istzfO76pwn2\n" +
            "yf1xvR/m8ar2kRzxOpeR5aRJz4GRRL54gfAQoltC8yeUZJhkTm0/t1Lm1sGu6wbA\n" +
            "/FTG6WuzoKIv1y9/K8eQlFtF94SNYWZZY+ysjal7qUQ/2IxgQ2ir5csRcs0o7n0x\n" +
            "fBwc7a+THW/yZc7fWwIDAQAB";

//将message通过sha512 哈希算法运算出hash
function sha512ToHash() {
    let m = document.getElementById("message").value;
    let hashed
    if (m.length == 0){
        hashed = "数据为空,无法计算HASH";
    }else{
        hashed = hex_sha512(m);
        hashed = hashed.slice(0,60);
    }
    document.getElementById("showHashed").value = hashed;
}

// 私钥+得到的hash——RSA签名算法——》生成签名
function getSignature() {
    let hashed = document.getElementById("showHashed").value;
    let encrypt = new JSEncrypt();
    encrypt.setPrivateKey('-----BEGIN PRIVATE KEY-----' + PRIVATE_KEY + '-----END PRIVATE KEY-----');
    let encrypted;
    if (hashed.length == 0) {
        encrypt = "缺少数据,无法签名";
        document.getElementById('signature').value = encrypt;
    } else {
        encrypted = encrypt.encrypt(hashed);
        console.log('加密前数据:%o', hashed);
        console.log('加密后数据:%o', encrypted);
        document.getElementById('signature').value = encrypted;
    }
}

页面:

就是很简单的form表单

<div style="margin-left: 430px">
    <h1>签名生成</h1>
</div>
<form action="">
    <table align="center">
        <tr>
            <td>
                输入Messsage:
            </td>
        </tr>
        <tr>
            <td>
                <input type="text" id="message" style="width: 260px"/>
            </td>
            <td>
                <button type="button" οnclick="sha512ToHash()">SHA-512</button>
            </td>
        </tr>
        <tr>
            <td>
                消息摘要:
            </td>
        </tr>
        <tr>
            <td>
                <input type="text" id="showHashed" style="width: 450px"/>
            </td>
            <td>
                <button type="button" οnclick="getSignature()">私钥签名</button>
            </td>
        </tr>
        <tr>
            <td>
                签名:
            </td>
        </tr>
        <tr>
            <td>
                <input type="text" id="signature" style="width: 450px"></input>
            </td>
        </tr>
    </table>
</form>

相关文章:

  • 《码出高效:java开发手册》六-数据结构与集合(一)
  • Anaconda开发环境
  • 品牌线上窜货治理方案
  • [第十二届蓝桥杯/java/算法]D——相乘
  • NewStarCTF公开赛week3密码学前两道题的wp
  • FOC算法与SVPWM技术
  • C++和Qt分别与HTuple之间相互转换
  • WPF使用快捷键 资源 输入快捷键与资源绑定 资源绑定调用操作 或keydown处理
  • HistoSeg:具有多损失函数的快速注意,用于数字组织学图像中的多结构分割
  • [洛谷]【深基16.例3】二叉树深度
  • Java 条件语句 - if...else
  • 网络实验之VTP协议
  • Python基础(十)模块与包
  • Vue3项目基本知识点
  • 中国晶振市场规模将增长至2026年的263.21亿元,国产市场未来可期
  • C 语言的编译,干货有点多!
  • set(关联性容器)
  • python中的% 是什么意思, 起到什么作用?
  • vue+antd搭建后台管理界面模版(PC端),适配中文、英文、日文 mock数据,开箱即用
  • php项目管理系统 。集产品管理、项目管理、质量管理、文档管理、 组织管理和事务管理于一体,是一款专业的研发项目管理软件