精华内容
下载资源
问答
  • 对称加密之分组加密【四】 1、分组密码概述 分组密码和流密码的区别。 1.分组密码和流密码的概念与区别: 所谓流密码,就是把明文的所有字符作为一个整体,然后一位一位地对明文字符进行加密。如维吉尼亚密码和...

    对称加密之分组加密【四】


    1、分组密码概述

    分组密码和流密码的区别。

    1.分组密码和流密码的概念与区别:

    所谓流密码,就是把明文的所有字符作为一个整体,然后一位一位地对明文字符进行加密。如维吉尼亚密码和Vernam密码,都属于流密码。一位明文被一位密钥加密为一位密文是流密码的特点。

    分组密码:需要先对明文进行分组,然后**对分组后的明文一组一组地进行加密。它与流密码的区别是,分组密码一次用一个密钥k加密一组明文,而不是一位一位加密。如下图明文分组长度为 n, 密文分组长度为 m, 加密函数 E : V n × K → V m E : V_n \times K \rightarrow V_m

    展开全文
  • 对称加密与非对称加密的区别

    对称加密(Symmetric Cryptography),又称私钥加密

    简单描述一下,加密和解密的秘钥使用的是同一个

    对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key),这种方法在密码学中叫做对称加密算法。对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中。对称加密通常使用的是相对较小的密钥,一般小于256 bit。因为密钥越大,加密越强,但加密与解密的过程越慢。如果你只用1 bit来做这个密钥,那黑客们可以先试着用0来解密,不行的话就再用1解;但如果你的密钥有1 MB大,黑客们可能永远也无法破解,但加密和解密的过程要花费很长的时间。密钥的大小既要照顾到安全性,也要照顾到效率,是一个trade-off。常见的对称加密算法有: DES、3DES、Blowfish、IDEA、RC4、RC5、RC6 和 AES 

    非对称加密(Asymmetric Cryptography),又称公钥加密

    与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)

    非对称加密为数据的加密与解密提供了一个非常安全的方法,它使用了一对密钥,公钥(public key)和私钥(private key)。私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。非对称加密使用这对密钥中的一个进行加密,而解密则需要另一个密钥。比如,你向银行请求公钥,银行将公钥发给你,你使用公钥对消息加密,那么只有私钥的持有人--银行才能对你的消息解密。与对称加密不同的是,银行不需要将私钥通过网络发送出去,因此安全性大大提高。

    常见的非对称加密算法有: RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用)

    下面说一下这两种方式的使用

    对称密钥加密我们从定义中应该就可以明白,它是信息的发送方和接收方都用同一个秘钥去加密和解密数据。这样做它的最大优势是加/解密速度快,适合于对大数据量进行密,但密钥管理困难。

    非对称密钥加密,它需要使用“一对”密钥来分别完成加密和解密操作,一个公开发布,即公开密钥,另一个由用户自己秘密保存,即私用密钥。信息发送者用公开密钥去加密,而信息接收者则用私用密钥去解密。公钥机制灵活,但加密和解密速度却比对称密钥加密慢得多。
    非对称密钥加密的使用过程:
    1. A要向B发送信息,A和B都要产生一对用于加密和解密的公钥和私钥。
    2. A的私钥保密,A的公钥告诉B;B的私钥保密,B的公钥告诉A。
    3. A要给B发送信息时,A用B的公钥加密信息,因为A知道B的公钥。
    4. A将这个消息发给B(已经用B的公钥加密消息)。
    5. B收到这个消息后,B用自己的私钥解密A的消息,其他所有收到这个报文的人都无法解密,因为只有B才有B的私钥。
    6. 反过来,B向A发送消息也是一样。

    对称加密和非对称加密的区别:

    (1) 对称加密加密与解密使用的是同样的密钥,所以速度快,但由于需要将密钥在网络传输,所以安全性不高。
    (2) 非对称加密使用了一对密钥,公钥与私钥,所以安全性高,但加密与解密速度慢。
     

    展开全文
  • 看看我 using System; using System.Collections.Generic; using System.IO; using System.Security.Cryptography; using System.Text;...namespace 加密 { class Program { static void Main(string[]...

    看看我

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Security.Cryptography;
    using System.Text;
    
    namespace 加密
    {
        class Program
        {
            static void Main(string[] args)
            {
                //RSA
                //var dicKey = RSAHelper.GetKey();
                //Console.WriteLine($"{dicKey["PublicKey"]}\r\n{dicKey["PrivateKey"]}");
                //string strText = "aaabbbcc";
                //Console.WriteLine("要加密的字符串是:{0}", strText);
                //string str1 = RSAHelper.Encrypt(strText, dicKey["PublicKey"]);
                //Console.WriteLine("加密后的字符串:{0}", str1);
                //string str2 = RSAHelper.Decrypt(str1, dicKey["PrivateKey"]);
                //Console.WriteLine("解密后的字符串:{0}", str2);
    
                //AES
                string password = "abcAE#$M&*987";
                Console.WriteLine($"原始密码为:{password} ");
    
                // AES的key支持128位,最大支持256位。256位需要32个字节。
                //string key = "1234567890qwerty1234567890qwerty";//32字节
                string key = AESHelper.GetRandomStr(32, true, true, true, true);
    
                var EncryptStr = AESHelper.Encrypt(key, password);
                Console.WriteLine($"使用密钥:{key} 为原密码:{password} 加密");
                Console.WriteLine($"得到密文:{EncryptStr}");
    
                Console.WriteLine($"使用密钥:{key} 为密文:{EncryptStr} 解密");
                var realPwd = AESHelper.Decrypt(key, EncryptStr);
                Console.WriteLine($"得到原密码:{realPwd}");
            }
        }
    
        public static class RSAHelper
        {
            /// <summary>
            /// 使用公钥加密
            /// </summary>
            /// <returns></returns>
            public static string Encrypt(string text, string publicKey)
            {
                byte[] byteEncrypt;
                using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
                {
                    rsa.ImportCspBlob(Convert.FromBase64String(publicKey));
                    byte[] byteText = Encoding.UTF8.GetBytes(text);
                    byteEncrypt = rsa.Encrypt(byteText, false);
                }
                return Convert.ToBase64String(byteEncrypt);
            }
    
            /// <summary>
            /// 私钥解密
            /// </summary>
            /// <param name="strEntryText"></param>
            /// <param name="strPrivateKey"></param>
            /// <returns></returns>
            public static string Decrypt(string encryptText, string privateKey)
            {
                byte[] byteText;
                using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
                {
                    rsa.ImportCspBlob(Convert.FromBase64String(privateKey));
                    byte[] byteEncrypt = Convert.FromBase64String(encryptText);
                    byteText = rsa.Decrypt(byteEncrypt, false);
                }
                return Encoding.UTF8.GetString(byteText);
            }
    
            /// <summary>
            /// 获取公钥和私钥
            /// </summary>
            /// <returns></returns>
            public static Dictionary<string, string> GetKey()
            {
                Dictionary<string, string> dicKey = new Dictionary<string, string>();
                using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
                {
                    string public_Key = Convert.ToBase64String(rsa.ExportCspBlob(false));
                    string private_Key = Convert.ToBase64String(rsa.ExportCspBlob(true));
                    dicKey.Add("PublicKey", public_Key);
                    dicKey.Add("PrivateKey", private_Key);
                }
                return dicKey;
            }
        }
    
        public static class AESHelper
        {
            //为什么要用base64,因为得到的密文是byte[],所以默认用base64转成str方便查看
            // AES 加密的初始化向量,加密解密需设置相同的值。需要是16字节
            public static byte[] AES_IV = Encoding.UTF8.GetBytes("1234567890123458");
    
            /// <summary>
            ///  加密
            /// </summary>
            /// <param name="key">密钥</param>
            /// <param name="data">要被加密的明文</param>
            /// <returns>密文base64</returns>
            public static string Encrypt(string key, string data)
            {
                using (AesCryptoServiceProvider aesAlg = new AesCryptoServiceProvider())
                {
                    aesAlg.Key = Encoding.UTF8.GetBytes(key);
                    aesAlg.IV = AES_IV;
                    ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
                    using (MemoryStream msEncrypt = new MemoryStream())
                    {
                        using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
                        {
                            using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
                            {
                                swEncrypt.Write(data);
                            }
                            byte[] bytes = msEncrypt.ToArray();
                            return Convert.ToBase64String(bytes);
                        }
                    }
                }
            }
    
            /// <summary>
            /// 解密
            /// </summary>
            /// <param name="key">密钥</param>
            /// <param name="encryptData">密文</param>
            /// <returns>明文</returns>
            public static string Decrypt(string key, string encryptData)
            {
                byte[] inputBytes = Convert.FromBase64String(encryptData);
                using (AesCryptoServiceProvider aesAlg = new AesCryptoServiceProvider())
                {
                    aesAlg.Key = Encoding.UTF8.GetBytes(key);
                    aesAlg.IV = AES_IV;
    
                    ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
                    using (MemoryStream msEncrypt = new MemoryStream(inputBytes))
                    {
                        using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, decryptor, CryptoStreamMode.Read))
                        {
                            using (StreamReader srEncrypt = new StreamReader(csEncrypt))
                            {
                                return srEncrypt.ReadToEnd();
                            }
                        }
                    }
                }
            }
    
            #region 生成指定长度的随机字符串
            /// <summary>
            /// 生成指定长度的随机字符串
            /// </summary>
            /// <param name="intLength">随机字符串长度</param>
            /// <param name="booNumber">生成的字符串中是否包含数字</param>
            /// <param name="booSign">生成的字符串中是否包含符号</param>
            /// <param name="booSmallword">生成的字符串中是否包含小写字母</param>
            /// <param name="booBigword">生成的字符串中是否包含大写字母</param>
            /// <returns></returns>
            public static string GetRandomStr(int intLength, bool booNumber, bool booSign, bool booSmallword, bool booBigword)
            {
                //定义
                Random ranA = new Random();
                int intResultRound = 0;
                int intA = 0;
                string strB = "";
    
                while (intResultRound < intLength)
                {
                    //生成随机数A,表示生成类型
                    //1=数字,2=符号,3=小写字母,4=大写字母
    
                    intA = ranA.Next(1, 5);
    
                    //如果随机数A=1,则运行生成数字
                    //生成随机数A,范围在0-10
                    //把随机数A,转成字符
                    //生成完,位数+1,字符串累加,结束本次循环
    
                    if (intA == 1 && booNumber)
                    {
                        intA = ranA.Next(0, 10);
                        strB = intA.ToString() + strB;
                        intResultRound = intResultRound + 1;
                        continue;
                    }
    
                    //如果随机数A=2,则运行生成符号
                    //生成随机数A,表示生成值域
                    //1:33-47值域,2:58-64值域,3:91-96值域,4:123-126值域
    
                    if (intA == 2 && booSign)
                    {
                        intA = ranA.Next(1, 5);
    
                        //如果A=1
                        //生成随机数A,33-47的Ascii码
                        //把随机数A,转成字符
                        //生成完,位数+1,字符串累加,结束本次循环
    
                        if (intA == 1)
                        {
                            intA = ranA.Next(33, 48);
                            strB = ((char)intA).ToString() + strB;
                            intResultRound = intResultRound + 1;
                            continue;
                        }
    
                        //如果A=2
                        //生成随机数A,58-64的Ascii码
                        //把随机数A,转成字符
                        //生成完,位数+1,字符串累加,结束本次循环
    
                        if (intA == 2)
                        {
                            intA = ranA.Next(58, 65);
                            strB = ((char)intA).ToString() + strB;
                            intResultRound = intResultRound + 1;
                            continue;
                        }
    
                        //如果A=3
                        //生成随机数A,91-96的Ascii码
                        //把随机数A,转成字符
                        //生成完,位数+1,字符串累加,结束本次循环
    
                        if (intA == 3)
                        {
                            intA = ranA.Next(91, 97);
                            strB = ((char)intA).ToString() + strB;
                            intResultRound = intResultRound + 1;
                            continue;
                        }
    
                        //如果A=4
                        //生成随机数A,123-126的Ascii码
                        //把随机数A,转成字符
                        //生成完,位数+1,字符串累加,结束本次循环
    
                        if (intA == 4)
                        {
                            intA = ranA.Next(123, 127);
                            strB = ((char)intA).ToString() + strB;
                            intResultRound = intResultRound + 1;
                            continue;
                        }
    
                    }
    
                    //如果随机数A=3,则运行生成小写字母
                    //生成随机数A,范围在97-122
                    //把随机数A,转成字符
                    //生成完,位数+1,字符串累加,结束本次循环
    
                    if (intA == 3 && booSmallword)
                    {
                        intA = ranA.Next(97, 123);
                        strB = ((char)intA).ToString() + strB;
                        intResultRound = intResultRound + 1;
                        continue;
                    }
    
                    //如果随机数A=4,则运行生成大写字母
                    //生成随机数A,范围在65-90
                    //把随机数A,转成字符
                    //生成完,位数+1,字符串累加,结束本次循环
    
                    if (intA == 4 && booBigword)
                    {
                        intA = ranA.Next(65, 89);
                        strB = ((char)intA).ToString() + strB;
                        intResultRound = intResultRound + 1;
                        continue;
                    }
                }
                return strB;
    
            }
            #endregion
        }
    
    }
    展开全文
  • PHP实现对称加密

    2021-01-12 21:34:12
    以下是封装的一个类xcrypt.php/*** 常用对称加密算法类* 支持密钥:64/128/256 bit(字节长度8/16/32)* 支持算法:DES/AES(根据密钥长度自动匹配使用:DES:64bit AES:128/256bit)* 支持模式:CBC/ECB/OFB/CFB* 密文...

    以下是封装的一个类

    xcrypt.php

    /**

    * 常用对称加密算法类

    * 支持密钥:64/128/256 bit(字节长度8/16/32)

    * 支持算法:DES/AES(根据密钥长度自动匹配使用:DES:64bit AES:128/256bit)

    * 支持模式:CBC/ECB/OFB/CFB

    * 密文编码:base64字符串/十六进制字符串/二进制字符串流

    * 填充方式: PKCS5Padding(DES)

    *

    * @author: linvo

    * @version: 1.0.0

    * @date: 2013/1/10

    */

    class Xcrypt{

    private $mcrypt;

    private $key;

    private $mode;

    private $iv;

    private $blocksize;

    /**

    * 构造函数

    *

    * @param string 密钥

    * @param string 模式

    * @param string 向量("off":不使用 / "auto":自动 / 其他:指定值,长度同密钥)

    */

    public function __construct($key, $mode = 'cbc', $iv = "off"){

    switch (strlen($key)){

    case 8:

    $this->mcrypt = MCRYPT_DES;

    break;

    case 16:

    $this->mcrypt = MCRYPT_RIJNDAEL_128;

    break;

    case 32:

    $this->mcrypt = MCRYPT_RIJNDAEL_256;

    break;

    default:

    die("Key size must be 8/16/32");

    }

    $this->key = $key;

    switch (strtolower($mode)){

    case 'ofb':

    $this->mode = MCRYPT_MODE_OFB;

    if ($iv == 'off') die('OFB must give a IV'); //OFB必须有向量

    break;

    case 'cfb':

    $this->mode = MCRYPT_MODE_CFB;

    if ($iv == 'off') die('CFB must give a IV'); //CFB必须有向量

    break;

    case 'ecb':

    $this->mode = MCRYPT_MODE_ECB;

    $iv = 'off'; //ECB不需要向量

    break;

    case 'cbc':

    default:

    $this->mode = MCRYPT_MODE_CBC;

    }

    switch (strtolower($iv)){

    case "off":

    $this->iv = null;

    break;

    case "auto":

    $source = PHP_OS=='WINNT' ? MCRYPT_RAND : MCRYPT_DEV_RANDOM;

    $this->iv = mcrypt_create_iv(mcrypt_get_block_size($this->mcrypt, $this->mode), $source);

    break;

    default:

    $this->iv = $iv;

    }

    }

    /**

    * 获取向量值

    * @param string 向量值编码(base64/hex/bin)

    * @return string 向量值

    */

    public function getIV($code = 'base64'){

    switch ($code){

    case 'base64':

    $ret = base64_encode($this->iv);

    break;

    case 'hex':

    $ret = bin2hex($this->iv);

    break;

    case 'bin':

    default:

    $ret = $this->iv;

    }

    return $ret;

    }

    /**

    * 加密

    * @param string 明文

    * @param string 密文编码(base64/hex/bin)

    * @return string 密文

    */

    public function encrypt($str, $code = 'base64'){

    if ($this->mcrypt == MCRYPT_DES) $str = $this->_pkcs5Pad($str);

    if (isset($this->iv)) {

    $result = mcrypt_encrypt($this->mcrypt, $this->key, $str, $this->mode, $this->iv);

    } else {

    @$result = mcrypt_encrypt($this->mcrypt, $this->key, $str, $this->mode);

    }

    switch ($code){

    case 'base64':

    $ret = base64_encode($result);

    break;

    case 'hex':

    $ret = bin2hex($result);

    break;

    case 'bin':

    default:

    $ret = $result;

    }

    return $ret;

    }

    /**

    * 解密

    * @param string 密文

    * @param string 密文编码(base64/hex/bin)

    * @return string 明文

    */

    public function decrypt($str, $code = "base64"){

    $ret = false;

    switch ($code){

    case 'base64':

    $str = base64_decode($str);

    break;

    case 'hex':

    $str = $this->_hex2bin($str);

    break;

    case 'bin':

    default:

    }

    if ($str !== false){

    if (isset($this->iv)) {

    $ret = mcrypt_decrypt($this->mcrypt, $this->key, $str, $this->mode, $this->iv);

    } else {

    @$ret = mcrypt_decrypt($this->mcrypt, $this->key, $str, $this->mode);

    }

    if ($this->mcrypt == MCRYPT_DES) $ret = $this->_pkcs5Unpad($ret);

    $ret = trim($ret);

    }

    return $ret;

    }

    private function _pkcs5Pad($text){

    $this->blocksize = mcrypt_get_block_size($this->mcrypt, $this->mode);

    $pad = $this->blocksize - (strlen($text) % $this->blocksize);

    return $text . str_repeat(chr($pad), $pad);

    }

    private function _pkcs5Unpad($text){

    $pad = ord($text{strlen($text) - 1});

    if ($pad > strlen($text)) return false;

    if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) return false;

    $ret = substr($text, 0, -1 * $pad);

    return $ret;

    }

    private function _hex2bin($hex = false){

    $ret = $hex !== false && preg_match('/^[0-9a-fA-F]+$/i', $hex) ? pack("H*", $hex) : false;

    return $ret;

    }

    }

    以下是测试,随便定义一个.php输出

    header('Content-Type:text/html;Charset=utf-8;');

    include "xcrypt.php";

    echo '

    ';

    $a = isset($_GET['a']) ? $_GET['a'] : '测试';

    //密钥

    $key = '12345678123456781234567812345678'; //256 bit 24位

    $key = '1234567812345678'; //128 bit 16位

    $key = '12345678'; //64 bit 8位

    //设置模式和IV

    $m = new Xcrypt($key, 'cbc', 'auto');

    // //获取向量值

    // echo '向量:';

    // var_dump($m->getIV());

    $b=$m->encrypt($a,'base64');

    $c=$m->decrypt($b,'base64');

    var_dump($b);

    echo "
    ";

    var_dump($c);

    输出结果

    string(12) "rOqTUzQmqOg="

    string(6) "测试"

    展开全文
  • php对称加密算法示例

    2020-12-30 14:10:55
    php对称加密算法KEY 是之前定义的常量复制代码 代码如下:Mcrypt::encrypt();Mcrypt::decrypt();复制代码 代码如下:defined("ROOT") or exit("Access Denied");class Mcrypt{public static function encrypt($code){...
  • 二、对称加密算法家谱1.引入库2.读入数据总结 前言 项目中经常会对数据库的密码加密后放到配置文件中,启动项目连接数据库时再对其进行解密,此加密与解密过程一般采用对称加密算法。本篇主要介绍什么是对称加密...
  • 对称加密 1. DES(Data Encryption Standard):数据加密标准 2. 3DES 3. AES(Advanced Encryption Standard):高级加密标准 非对称加密 RSA 不可逆 哈希HASH 1.MD5加密 2.MD5加“盐” 3.SHA加密 ...
  • 对称加密: 二、DES加密解密 1.示例代码 des加密解密算法 2.加密模式 ECB CBC 3.填充模式 三、AES加密解密 四、toString()与new String ()用法区别 五、非对称加密 1.非对称加密简介 2.常见非对称加密算法 2.1 生成...
  • 对称加密 1.1定义 1.2优缺点 1.3常用对称加密算法 非对称加密( Asymmetric Cryptography ) 非对称加密(现代加密算法) 2.1定义 数字签名 非常好的文章:《三分钟了解对称加密和非对称加密是如何工作的》...
  • 这篇文章主要介绍了python使用rsa非对称加密过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下1、安装rsa支持python 2.7 或者 python 3.5 以上版本使用...
  • 在了解对称加密和非对称加密的区别之前我们先了解一下它们的定义对称加密(Symmetric Cryptography),又称私钥加密 对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样...
  • 对称加密算法 1.1 定义 加密和解密时使用的是同一个秘钥 1.2 传输过程 数据发信方将原始数据和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。 收信方收到密文后,要使用加密用过的密钥及...
  • 密码学专题 对称加密算法

    千次阅读 2021-11-16 18:02:06
    一般来说,使用OpenSSL对称加密算法有两种方式,一种是使用API函数的方式,一种是使用OpenSSL提供的对称加密算法指令方式。本书将介绍对称加密算法的指令方式 OpenSSL的对称加密算法指令主要用来对数据进行加密和...
  • 目前开发场景中,需要对一些关键信息进行加密传输 ,除了一些服务器运维层面,如防火墙,监控软件等等,还有开启https加密外,我们这里采取RSA与AES两个加解密算法来实现信息的加解密传输。具体步骤如下: 步骤...
  • crypto.js对称加密解密

    2021-09-15 16:29:09
    由于公司的项目涉及敏感数据问题,需要对数据进行加密,以最大限制防止别人的抓包和数据泄露,除了使用https的安全,前端常用的加密算法对称加密和非对称加密,今天主要说对称加密AES。 1、概况 crypto-js是谷歌...
  • 对称加密之公钥密码体系 【5】 非对称加密之公钥密码体系 古典密码到现代密码最主要的区别便是密码体系的安全不在依赖于加密算法的安全,而是依赖秘钥的安全。在互联网上通信时,若需要加密需要事先共享秘钥,...
  • 定义:采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。 工作过程举例:甲和乙经常会相互之间邮寄重要的货物。为了保证货物的安全,他们商定...
  • mysql是否具有非对称加密功能?(Does mysql have asymmetric encryption capabilities?)我的问题很简单 - 在MySQL中是否存在非对称(公钥/私钥)加密等功能,如AES_ENCRYPT / AES_DECRYPT?可悲的是,我只找到涉及PHP...
  • 何为非对称加密

    2021-03-09 08:43:07
    对称加密是为了弥补对称加密的缺点, 如果不了解对称加密的过程,建议先看这篇文章 何为对称加密? 为了解决信息公开传送和密钥管理问题,允许在不安全的媒体上的通讯双方交换信息,安全地达成一致的密钥 用公开...
  • 文首声明:本文不讲算法实现AES介绍AES算法是一种典型的对称加密算法,不同于md5这种摘要算法是不可逆的,AES是可以通过秘钥解密的,一般用于对私密信息的保密。md5算法一般用文件的完整性校验,可以根据文件的所有...
  • 2. 加密算法2.1 对称加密2.2 非对称加密2.2.1 非对称加密的重要性质2.2.2 非对称加密算法应用2.2.2.1 应用1 加密通信2.2.2.1.1 单向认证和双向认证2.2.2.1 应用2 数字签名3. 数字签名3.1 数字签名用法演示3.2 数字...
  • 对称加密之流密码【三】 对称加密之流密码 1 一次一密 一次一密 (one-time pad) 是一种较理想的加密方式, 1917 年 由 AT&T 实验室提出,秘钥随机生成,而且只用一次。已经证明在秘钥安全的情况下,改方案...
  • 什么是对称加密

    2021-05-09 04:07:50
    采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。目录1 定义2 工作过程3 常用算法4 优缺点定义需要对加密和解密使用相同密钥的加密算法。由于其...
  • } } 非对称加密方式可用于多种场景,例如: ①前端加密登录信息,前端使用公钥对用户名密码进行加密,后端在登录接口时,使用私钥进行解密。 ②后端对数据传输内容进行加密。 通过全局注解和切面方式,对所有有...
  • 解读国密非对称加密算法SM2

    千次阅读 2021-01-21 16:44:37
    解读国密非对称加密算法SM2 本文先介绍非对称加密算法,然后聊一聊椭圆曲线密码算法(Elliptic Curve Cryptography,ECC),最后才是本文的主题国密非对称加密算法SM2。因为我的数学知识有限,对于算法涉及的一些...
  • 通俗理解非对称加密

    2021-08-05 09:13:47
    注: 这里只是说的单向SSL过程,如果是双向的话客户端也要有自己的证书 验证证书通过后之后,客户端和服务端会协商一个对称加密进行通信,因为非对称加密太慢了。(因为对称加密的过程对本文没影响,所以有兴趣的...
  • 1.10 非对称加密 简介: ① 非对称加密算法又称现代加密算法。 ② 非对称加密是计算机通信安全的基石,保证了加密数据不会被破解。 ③ 与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和...
  • 百度百科是这么说的:RSA是一种非对称加密机制。是一种公开密钥密码体制。所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。是由该...
  • 简介 ...虽然TEA算法比 DES(Data Encryption Standard) 要简单得多, 但有很强的抗差分分析能力,加密速度也比 DES 快得多,比较试用于一些低性能处理器场合 加密算法 unsigned int key[4] = { 0xA91B

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 37,089
精华内容 14,835
关键字:

对称加密定义