C# + PHP RSA保密通讯
学习中...
C#
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace LiveMGT
{public partial class Main : Form{private readonly string AppID = "703093033";private readonly string AppKey = "e2470a332d21d641298136c2754331aa";private readonly HttpHelper HTTP;public Main(){InitializeComponent();string PuKey = File.ReadAllText(@".\Config\PuKey.xml");INIHelper INIFile = new INIHelper();string Url = INIFile.Read("Server", "Url", "Null", @".\Config\Client.ini");HTTP = new HttpHelper(AppID, AppKey, PuKey, Url);}private void button5_Click(object sender, EventArgs e){HTTP.POST(textBox1.Text,out string reStr,out string errStr);textBox2.Text = errStr;textBox3.Text = reStr;}private void Main_Load(object sender, EventArgs e){}}
}
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Net;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using zlib;namespace LiveMGT
{class HttpHelper{private readonly string AppID;private readonly string AppKey;private readonly string PuKey;private readonly string Url;private string PHPSESSID;#region 初始化/// <summary>/// 初始化/// </summary>public HttpHelper(string _AppID, string _AppKey, string _PuKey, string _Url){AppID = _AppID;AppKey = _AppKey;PuKey = _PuKey;Url = _Url;PHPSESSID = "";}#endregion#region HTTP POST/// <summary>/// HTTP POST/// </summary>/// <param name="dataStr">需要提交的字符串</param>/// <param name="resultStr">提交后网页返回的JSON字符串</param>/// <param name="errStr">如果提交失败返回错误内容</param>/// <returns>成功返回true,失败返回false</returns>public bool POST(string dataStr,out string resultStr,out string errStr) {resultStr = "";errStr = "";if (dataStr == string.Empty || dataStr == "") {errStr = "request_data_err";return false;}try{string NumRan = RanNum(); //请求随机string TimeRnd = GetTimeStamp(true); //请求时间string KeyRnd = MD5(AppID + TimeRnd + NumRan + AppKey); //请求密钥KeyRnd = HmacMD5(KeyRnd, AppKey); //请求密钥string RSARnd = RSAENC(PuKey, KeyRnd); //公钥加密RSARnd = StrToHex(RSARnd); //公钥加密if (RSARnd == ""){errStr = "request_rsa_err";return false;}//-----------------------------------------------------------------------------int dataLen = dataStr.Length; //数据长度dataStr = Compress(dataStr); //数据压缩string postStr = RC4ENC(dataStr, KeyRnd); //加密数据byte[] sendData = Encoding.UTF8.GetBytes(postStr); //发送数据 string cookieStr = PHPSESSID + ";appid=" + AppID + ";time=" + TimeRnd + ";rand=" + NumRan + ";length=" + dataLen + ";key=" + RSARnd;//----------------------------------------------------------------------------- HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);request.Method = "POST";request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36";request.Timeout = 10000;request.KeepAlive = false;request.Headers.Add("Cookie", cookieStr);request.ContentLength = sendData.Length;Stream newStream = request.GetRequestStream();newStream.Write(sendData, 0, sendData.Length);newStream.Close();HttpWebResponse myResponse = (HttpWebResponse)request.GetResponse();StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);string content = reader.ReadToEnd();reader.Close();reader.Dispose();cookieStr = myResponse.Headers.Get("Set-Cookie");resultStr = content;//不管是否成功都返回//----------------------------------------------------------------------------- if (PHPSESSID == ""){PHPSESSID = MidStrEx(cookieStr, "PHPSESSID=", ";");if (PHPSESSID == string.Empty || PHPSESSID == ""){errStr = "response_phpsessid_err";return false;}PHPSESSID = "PHPSESSID=" + PHPSESSID;}string _appid = MidStrEx(cookieStr, "appid=", ";");if (_appid == string.Empty || _appid == "" || _appid != AppID){errStr = "response_appid_err";return false;}//----------------------------------------------------------------------------- NumRan = MidStrEx(cookieStr, "rand=", ";"); //请求随机TimeRnd = MidStrEx(cookieStr, "time=", ";"); //请求时间RSARnd = MidStrEx(cookieStr, "key=", ";"); //公钥加密dataLen = int.Parse(MidStrEx(cookieStr, "length=", ";")); //数据长度if (NumRan == string.Empty || NumRan == "" || TimeRnd == string.Empty || TimeRnd == "" || RSARnd == string.Empty || RSARnd == "" || dataLen <= 0){errStr = "response_cooikes_err";return false;}KeyRnd = MD5(AppID + TimeRnd + NumRan + AppKey); //请求密钥KeyRnd = HmacMD5(KeyRnd, AppKey); //请求密钥RSARnd = HexToStr(RSARnd); //公钥加密//----------------------------------------------------------------------------- if (RSACheck(content, RSARnd, PuKey) == false){errStr = "response_check_err";return false;}content = RC4DEC(content, KeyRnd);if (content == string.Empty || content == "") {errStr = "response_rc4dec_err";return false;}content = UCompress(content, dataLen);if (content == string.Empty || content == ""){errStr = "response_ucompress_err";return false;}resultStr = content;return true;} catch{return false;}}#endregion#region 取随机数/// <summary>/// 取随机数/// </summary>/// <returns></returns>private static string RanNum() {try{Random rnd = new Random();string num = rnd.Next(11111111, 88888888).ToString();return num;}catch {return "";}}#endregion#region 取字符串中间/// <summary>/// 取字符串中间/// </summary>/// <param name="sourse">需要截取的字符串</param>/// <param name="startstr">字符串前面</param>/// <param name="endstr">字符串后面</param>/// <returns>返回截取后字符串</returns>private static string MidStrEx(string sourse, string startstr, string endstr){try{string result = "";int startindex, endindex;startindex = sourse.IndexOf(startstr);if (startindex == -1)return result;string tmpstr = sourse.Substring(startindex + startstr.Length);endindex = tmpstr.IndexOf(endstr);if (endindex == -1)return result;result = tmpstr.Remove(endindex);return result;}catch{return "";}}#endregion#region 数据解压/// <summary>/// 数据解压/// </summary>/// <param name="strSource">需要解压的字符串</param>/// <param name="sLen">字符串未压缩之前的长度</param>/// <returns>返回解压后字符串</returns>private static string UCompress(string strSource,int sLen){try {int data;int stopByte = -1;byte[] Buffer = Convert.FromBase64String(strSource); // 解base64MemoryStream intms = new MemoryStream(Buffer);ZInputStream inZStream = new ZInputStream(intms);byte[] inByteList = new byte[sLen];int i = 0;while (stopByte != (data = inZStream.Read())){inByteList[i] = (byte)data;i++;}inZStream.Close();return Encoding.UTF8.GetString(inByteList, 0, inByteList.Length);} catch {return "";}}#endregion#region 数据压缩/// <summary>/// 数据压缩/// </summary>/// <param name="Source">需要压缩的字符串</param>/// <returns>压缩后字符串</returns>private static string Compress(string Source){try{byte[] byteData = Encoding.UTF8.GetBytes(Source);MemoryStream ms = new MemoryStream();Stream s = new ZOutputStream(ms, 9);s.Write(byteData, 0, byteData.Length);s.Close();byte[] compressData = (byte[])ms.ToArray();ms.Flush();ms.Close();return Convert.ToBase64String(compressData);}catch{return "";}}#endregion#region 获取当前时间戳/// <summary> /// 获取当前时间戳 /// </summary> /// <param name="bflag">为真时获取10位时间戳,为假时获取13位时间戳.bool bflag = true</param> /// <returns>返回时间戳字符串</returns> private static string GetTimeStamp(bool bflag){try {TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);if (bflag)return Convert.ToInt64(ts.TotalSeconds).ToString();elsereturn Convert.ToInt64(ts.TotalMilliseconds).ToString();} catch{return "";}}#endregion#region 用MD5加密字符串/// <summary>/// 用MD5加密字符串/// </summary>/// <param name="password">待加密的字符串</param>/// <returns>返回的加密后的字符串</returns>private static string MD5(string password){try {MD5CryptoServiceProvider md5Hasher = new MD5CryptoServiceProvider();byte[] hashedDataBytes;hashedDataBytes = md5Hasher.ComputeHash(Encoding.UTF8.GetBytes(password));StringBuilder tmp = new StringBuilder();md5Hasher.Clear();md5Hasher.Dispose();foreach (byte i in hashedDataBytes){tmp.Append(i.ToString("x2"));}return tmp.ToString();//默认情况} catch{return "";}}#endregion#region HmacMD5加密/// <summary>/// HmacMD5加密/// </summary>/// <param name="source">需要加密的字符串</param>/// <param name="keyStr">用于加密的密钥</param>/// <returns>加密后的字符串</returns>private static string HmacMD5(string source, string keyStr){try {HMACMD5 provider = new HMACMD5(Encoding.UTF8.GetBytes(keyStr));byte[] hashedPassword = provider.ComputeHash(Encoding.UTF8.GetBytes(source));StringBuilder displayString = new StringBuilder();for (int i = 0; i < hashedPassword.Length; i++){displayString.Append(hashedPassword[i].ToString("X2"));}provider.Clear();provider.Dispose();return displayString.ToString().ToLower();//转换到小写}catch{return "";}}#endregion#region RC4加密/// <summary>/// RC4加密/// </summary>/// <param name="source">需要加密的字符串</param>/// <param name="keyStr">用于加密的密钥</param>/// <returns>返回加密后的字符串</returns>private static string RC4ENC(string source, string keyStr){try{byte[] contents = Encoding.UTF8.GetBytes(source);return Convert.ToBase64String(RC4(contents, keyStr));//转为base64编码}catch{return "";}}#endregion#region RC4解密/// <summary>/// RC4解密/// </summary>/// <param name="source">需要加密的字符串</param>/// <param name="keyStr">用于加密的密钥</param>/// <returns>返回解密后的字符串</returns>private static string RC4DEC(string source, string keyStr){try{byte[] data = Convert.FromBase64String(source);//base64编码还原byte[] str = RC4(data, keyStr);return Encoding.UTF8.GetString(str);}catch{return "";}}#endregion#region RC4加密解密/// <summary>/// RC4加密解密/// </summary>/// <param name="source">需要加密的字符串</param>/// <param name="keyStr">用于加密的密钥</param>/// <returns>加密后的字节集</returns>private static byte[] RC4(byte[] contents, string keyStr){byte[] results = new byte[contents.Length];byte[] pwds = Encoding.UTF8.GetBytes(keyStr);byte[] key = new byte[256];byte[] box = new byte[256];for (int i = 0; i < 256; i++){key[i] = pwds[i % pwds.Length];box[i] = (byte)i;}for (int j = 0, i = 0; i < 256; i++){j = (j + box[i] + key[i]) % 256;byte tmp = box[i];box[i] = box[j];box[j] = tmp;}for (int a = 0, j = 0, i = 0; i < contents.Length; i++){a = (a + 1) % 256;j = (j + box[a]) % 256;byte tmp = box[a];box[a] = box[j];box[j] = tmp;byte k = box[((box[a] + box[j]) % 256)];results[i] = (byte)(contents[i] ^ k);}return results; }#endregion#region 字符串到十六进制/// <summary>/// 字符串到十六进制/// </summary>/// <param name="source">需要转十六进制的字符串</param>/// <returns>返回编好后的十六进制字符串</returns>private static string StrToHex(string source){try {string result = string.Empty;byte[] arrByte = Encoding.UTF8.GetBytes(source);for (int i = 0; i < arrByte.Length; i++){result += Convert.ToString(arrByte[i], 16);}return result.ToUpper();} catch{return "";}}#endregion#region 十六进制到字符串/// <summary>/// 十六进制到字符串/// </summary>/// <param name="hex">需要解码到字符串的十六进制文本</param>/// <returns>返回解码后的十六进制字符串</returns>private static string HexToStr(string hex){try{byte[] arrByte = new byte[hex.Length / 2];int index = 0;for (int i = 0; i < hex.Length; i += 2){arrByte[index++] = Convert.ToByte(hex.Substring(i, 2), 16);}return Encoding.UTF8.GetString(arrByte);} catch{return "";}}#endregion#region RSA公钥加密/// <summary>/// RSA公钥加密/// </summary>/// <param name="xmlPublicKey">公钥XML文件</param>/// <param name="content">需要加密的内容</param>/// <returns>返回加密后字符串</returns>private static string RSAENC(string xmlPublicKey, string content){try{string encryptedContent = string.Empty;using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider()){rsa.FromXmlString(xmlPublicKey);byte[] encryptedData = rsa.Encrypt(Encoding.UTF8.GetBytes(content), false);encryptedContent = Convert.ToBase64String(encryptedData);}return encryptedContent;}catch {return "";}}#endregion#region RSA验证/// <summary>/// /// </summary>/// <param name="str">需要验证的文本</param>/// <param name="sign">私钥签名的字符串</param>/// <param name="str_publicKey">公钥XML文件</param>/// <returns>返回验证结果</returns>private static bool RSACheck(string str, string sign, string str_publicKey){try{byte[] SignedData = Convert.FromBase64String(sign);ASCIIEncoding ByteConverter = new ASCIIEncoding();byte[] DataToVerify = ByteConverter.GetBytes(str);RSACryptoServiceProvider RSAalg = new RSACryptoServiceProvider();RSAalg.FromXmlString(str_publicKey);bool result = RSAalg.VerifyData(DataToVerify, new SHA1CryptoServiceProvider(), SignedData);RSAalg.Clear();RSAalg.Dispose();return result;}catch{return false;}}#endregion}
}
PHP
<?php
//-----------------------APP基础配置----------------------------
define("app_id", "703093033");
define("app_key", "e2470a332d21d641298136c2754331aa");
//-----------------------RSA密钥配置----------------------------
define("private_key", "-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEAy4RN2yLtquuGD77wX0IaWpfgbN70G5+dlhsfowKJy7oxP+cC
PKINXUkF5rSdTveGUlZDOtLYJghOD7biloJdW5+6mglGguVIC7430gdW/btT3Yul
3+IZa6Zj6SdGsmyOE4WPbjS6q8aUBmOdHf7dVYfbRVk9jZnBCEx/64S8kQI4Jz8o
2tV6rKvKkyTn///dBKDKSPWYtOG2bq7G1XwYrf8PLL0Ek7lRHX5w7JVWovDhKsGq
Xoho9CxM2sZRCSMeZpdBU9+xxFjNGl5NQHyWJefKzVdXFT9sF/UZGu1UXRuiCQyf
1LJvweIwyBo1ctcuJdRMNrZxoBCUYile2LiTQQIDAQABAoIBAHrt5aEyDeEp9oZY
TRUc9pI2HudkHIr69NMQeyGZjOY0Bz+UJ/O75tqsGxZpjoN+W/IsDNvhM5J1fcFc
NK24/O81Ih+c7qxuFgCR22HP8Sm+F0BA8+axya0Oilbw1HE9xOvhxutIimDrx8m8
LdFKeyMIttfCub1oXALJQpNeUBA99LBtVCV4aJdLTZh82XNCaKg0w7t+KLz8i98K
JAMvuYg6A4Vv0zlG1CbTvykOJ0CyKMw3BlQMRm7U+6K8g3S5pHpnCQJURssd58hr
uJAvDP4T1oEXEsqF135pQh2oK7qufHRgRWTSihHUXIx/uFXs52BvPIt7meJq6PBG
ONA28ykCgYEA8n+HrygKpCEHhyrtwtiV2zwBnEcQz10TVtp7vmWYm3ECpLobwyJI
sSiq0fUMPga1bDYxtxRXkOI+bj3e7jBPcmhvlQvvWeXBUhtq8J1wQzYlg+HI4+K/
oUfT3hY6Vp/4eVLA9ro3NPPwXDRyjS/UsKtiMb1PInRcER/4AFdkLBsCgYEA1tkm
Woxp+dgK7TRIdsdk3B3E6H/HmzADZYtJr7BxePhp4HJtXFakAHiY90mAeu2TvyeM
ewYXEE/wGqdae7yVydgHchHd8auGOIoimlhRmmOM6Hvmr4KvYDXgK3dHSCrueNhB
U/CWyTeFYKHNhbEbkswvDESohqGKWjzUqkTaO9MCgYBfvP3Cp1pcJjYkpUwtSvkP
DwfLvTrjw2lpNuT37IBtjhZvFpLzXUu5tcaLEeX9bwSdbl/+WeegadIgEAk9nJEh
KB41h/q9UTobwntb96xkvLHe+XsojVL+x67b1Ya+wHWG4KcSQb6eB1jz7jjziNi9
z0v7OzRM9AeNM0PkTpxb1QKBgBdUBMIYNPmX57fR0Xx0MhNkeBj2punG0NeZxCp7
cha8gmKIii9YiP40Ggffxz+RxFUhKjPBeYef5mY+faip1WnRNx2/quWuxigld5Ri
upmU7ZvguC+edQRxVSHjFa5UWwhsEsvWd8jpamYPq400qdXKreEbI2Fa8PbTXBQQ
3dFZAoGAVPeYH7IWLiMUsRHY5r/oEZjAjHj1QadARtgAX8NCopRbplsJHadXqg5y
UiPRRDn5XFROf0PqgDrVUN2vLkKrQQIlJPvruQNDELyXkwQWPVbNA1Q2aLIi5GWt
OzUJVxNNHxo+//GLZD09ZKdDiBUtYGqFU3cE1+CSA6L5IRVqTFo=
-----END RSA PRIVATE KEY-----");
//-----------------------校验函数定义----------------------------
//十六进制转字符串
function hexToStr($hex){$string="";for($i=0;$i<strlen($hex)-1;$i+=2)$string.=chr(hexdec($hex[$i].$hex[$i+1]));return $string;
}
//字符串转十六进制
function strToHex($string){$hex="";for($i=0;$i<strlen($string);$i++)$hex.=dechex(ord($string[$i]));$hex=strtoupper($hex);return $hex;
}
//私钥解密由加密函数加密后的base64编码
function rsadec($data){ $pi_key = openssl_pkey_get_private(private_key);$data = base64_decode($data);$decrypted = "";$isOkay = openssl_private_decrypt($data, $decrypted, $pi_key);if(!$isOkay){return false;} return $decrypted;
}
//RSA签名
function getSign($signString){$privKeyId = openssl_pkey_get_private(private_key);$signature = '';openssl_sign($signString, $signature, $privKeyId);openssl_free_key($privKeyId);return base64_encode($signature);
}
//HMAC_MD5加密
function hmac($data, $key){if (function_exists('hash_hmac')) {return hash_hmac('md5', $data, $key);}$key = (strlen($key) > 64) ? pack('H32', 'md5') : str_pad($key, 64, chr(0));$ipad = substr($key,0, 64) ^ str_repeat(chr(0x36), 64);$opad = substr($key,0, 64) ^ str_repeat(chr(0x5C), 64);return md5($opad.pack('H32', md5($ipad.$data)));
}
//rc4加密并返回base64编码
function rc4enc($pwd, $data){return base64_encode(rc4($pwd, $data));
}
//解密由加密函数加密后的base64编码
function rc4dec($pwd, $data){$data = base64_decode($data);return rc4($pwd, $data);
}
//RC4加密解密
function rc4($pwd, $data){$cipher = "";$key[] = "";$box[] = "";$pwd_length = strlen($pwd);$data_length = strlen($data);for ($i = 0; $i < 256; $i++) {$key[$i] = ord($pwd[$i % $pwd_length]);$box[$i] = $i;}for ($j = $i = 0; $i < 256; $i++) {$j = ($j + $box[$i] + $key[$i]) % 256;$tmp = $box[$i];$box[$i] = $box[$j];$box[$j] = $tmp;}for ($a = $j = $i = 0; $i < $data_length; $i++) {$a = ($a + 1) % 256;$j = ($j + $box[$a]) % 256;$tmp = $box[$a];$box[$a] = $box[$j];$box[$j] = $tmp;$k = $box[(($box[$a] + $box[$j]) % 256)];$cipher .= chr(ord($data[$i]) ^ $k);}return $cipher;
}//回复验证信息
function sendMsg($msg){$time = time();$rand = rand(11111111, 88888888);$md5 = md5(app_id.$time.$rand.app_key);$md5 = hmac($md5,app_key);setcookie("appid",app_id,time() + 300); //5分钟内有效setcookie("time",$time,time() + 300); //5分钟内有效setcookie("rand",$rand,time() + 300); //5分钟内有效//----------------------------------------------$len = strlen($msg); //长度setcookie("length",$len,time() + 300); //5分钟内有效//----------------------------------------------$str = base64_encode(gzcompress($msg, 9)); //压缩$str = rc4enc($md5,$str); //加密$key = getSign($str); //签名$key = strToHex($key);setcookie("key",$key,time() + 300); //5分钟内有效//----------------------------------------------echo $str;exit();
}
//-----------------------取出_COOKIE----------------------------
$appid = $_COOKIE["appid"]; //请求标识
$time = $_COOKIE["time"]; //请求时间
$rand = $_COOKIE["rand"]; //请求随机
$length = $_COOKIE["length"]; //数据长度
$key = $_COOKIE["key"]; //公钥加密
$now = time() - 1; //现行时间戳(减1防止提交太快造成负数)
//判断参数合法性
if($appid == "" or $time =="" or $rand =="" or $length =="" or $key ==""){echo "COOKIE_ERR";exit();
}
//判断appid
if($appid != app_id){echo "AppID_ERR";exit();
}
//请求间隔
$interval = $time - $now;
//必须是10秒之内的请求
if($interval < 0 or $interval > 10){echo "interval_err";exit();
}
//判断随机数
if($rand <= 0){ echo "rand_err";exit();
}
//还原加密串
$key = hexToStr($key);
if($key == ""){echo "key_err";exit();
}
//解密加密串
$key = rsadec($key);
if($key == ""){ echo "rsa_err";exit();
}
//检测公钥加密
$md5 = md5($appid.$time.$rand.app_key);
$md5 = hmac($md5,app_key);
if($key != $md5){ echo "rc4_err";exit();
}
//取请求数据
$post = file_get_contents('php://input');
if($post == ""){echo "post_err";exit();
}
//解密数据
$post = rc4dec($key,$post);
if($post == ""){echo "rc4dec_err";exit();
}
//解压数据
$post = gzuncompress(base64_decode($post));
if($post == ""){echo "gzuncompress_err";exit();
}echo sendMsg($post);?>
C# + PHP RSA保密通讯相关推荐
- 初等数论 课堂笔记 第三章 -- 保密通讯与公开密钥
索引 保密通讯 仿射密码 例子 指数密码 ( Pohlig, Hellman, 1978 ) 例子 RSA公开密钥体制( Rivest, Shamir, Adleman, 1977; 英国情报部门的C ...
- 与非营利朕亨基金会合作 Keybase将保密通讯软体结合加密货币
保密通讯软件Keybase在部落格宣布,现在开始由非营利组织Stellar基金会资助,并透露会与Stellar加密货币功能结合,发布新的版本. Keybase的共同创办人Chris Coyne表示,之 ...
- ios下使用rsa算法与php进行加解密通讯
首先了解一下几个相关概念,以方便后面遇到的问题的解决: RSA算法:1977年由Ron Rivest.Adi Shamirh和LenAdleman发明的,RSA就是取自他们三个人的名字.算法基于一个数 ...
- RSA加密解密在jsencrypt+c#的实现-博客园加密登录
前几天发现博客园登录时,对登录的数据进行了加密,在我这种菜鸟看来算是高大上的功能了,于是决定研究一下. 后来发现其实园子里或者网上有类似文章,但好像都是php写的demo,并没有c#的示例,所以在收集 ...
- Javascript到PHP加密通讯的简单实现
互联网上大多数网站,用户的数据都是以明文形式直接提交到后端CGI,服务器之间的访问也大都是明文传输,这样可被一些别有用心之人通过一些手段监听到.对安全性要求较高的网站,比如银行和大型企业等都会使用HT ...
- Android混流技术,基于Android的实时语音混沌保密技术的实现
摘要: 网络和多媒体技术的发展和成熟,使之通过网络进行语音交流越来越流行,同时,网络的开放和共享性使信息安全问题也得到更多的关注.因此,怎样实现语音的安全通信的研究变得越来越重要.混沌系统由于自身独特 ...
- PHP-RSA加密跨域通讯实战
PHP-RSA加密跨域通讯实战 AUTH:PHILO EMAIL:lijianying12 at gmail.com 基于POST GET 的http通讯虽然非常成熟,但是很容易被人监听. 并且如果使 ...
- “九”答不可 | 量子通信如何做到安全保密?
导读 打个电话,会不会被窃听?通过网络传送一份保密文件,途中被他人窃取咋办--现代社会,信息安全面临的问题越来越多. 有没有一种不可破译的保密方式,能让传送的信息绝对安全可靠?量子通信技术的飞跃发展正 ...
- OpenSSL简介及在Windows、Linux、Mac系统上的编译步骤
OpenSSL介绍:OpenSSL是一个强大的安全套接字层密码库,囊括主要的密码算法.常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用. SSL是SecureSock ...
最新文章
- 外部样式表声明的样式并不会进入style对象
- Java-小技巧-004-jdk时间,jdk8时间,joda,calendar,获取当前时间前一周、前一月、前一年的时间...
- dll可以在linux下使用吗_无需虚拟技术,6步直接在Windows下使用Linux
- JDBC、DriverManage、JNDI、数据源(DataSource)、连接池的区别
- SQLServer常用系统视图
- 如何写出好的Java代码?
- 解决方案/DIV+CSS 在 IE7/IE6/Firefox间的兼容性问题
- Use YSlow to know why your web Slow
- java 微信公众号消息推送 微信发送消息
- docker执行权限问题Got permission denied while trying to connect to the Docker daemon socket
- TCP BBR Startup gain计算总结和Startup失速问题
- 微信小程序——猜数字游戏小案例
- 计算机毕业设计Python+uniapp快递寄取微信小程序(小程序+源码+LW)
- SpringCloud之搭建PiggyMetrics项目
- 重庆事业单位计算机知识,重庆事业单位考试全面知识点汇总
- JS:二分搜索(3)—— 子序列、信封嵌套、阶乘数的0
- 罕见!谷歌员工成立工会,国外网友:员工维权行动已席卷硅谷!
- 2020年第二届网鼎杯,青龙队伍题目,共十八道
- 输入三角形的3边长,求三角形面积
- 10月笔试面试记录分享
热门文章
- 程序崩溃APPcrash的问题
- 卡耐基人际关系学-第一章 卡耐基应付对手的方法-一 避免伤害的艺术
- 计算机excel中累计如何计算,『EXCEL表中,累计计算公式如何设置』excel分段累计求和...
- 姚明全部比赛录像合集【百度网盘高清分享】
- pc系统设计演变_设计师的演变
- Ubuntu13.04配置完全指南(四)安装常用软件包
- wps linux 程序转pdf文件,将PowerPoint转换成PDF的九款免费软件(附下载)
- 【安卓10修改系统文件】安卓10修改系统文件hosts
- 苹果计算机怎么开科学,苹果手机怎样设置科学计算器?
- 精美好用的思维导图插件,无缝对接各种前端框架,快来围观吧