C#实现RSA签名,签名算法采用SHA-256,JAVA部分已有,因需要转为C#代码,望大神出手相助 10C

package test;

import java.math.BigInteger;
import java.security.KeyFactory;
import java.security.MessageDigest;
import java.security.PrivateKey;
import java.security.Signature;
import java.security.spec.RSAPrivateKeySpec;
import java.util.Calendar;
import java.util.Date;

public class test
{
public static void main(String[] args) throws Exception
{
String msg = "0|20140411|1\n银联基金交易账号|用户在基金公司的账号|申请日期|银联订单号|确认日期|基金公司确认编号|返回码|失败原因\n1040000000371674|20000015|20140410|20120528990000120140410000000120|20140411|2250000000016|0000|\n";
byte[] data = msg.getBytes("UTF-8");
// 私钥
BigInteger modulus = new BigInteger("00af9133ade333df8b9aabd776334d0d8f5d96597fe2041fff716185305934cc7a386ab451f28156730ce8a76adcf9bf93ffc87fa47c0d60c4652f1700f50304997a20563cc854f1f84c921f9b1f72d0d3e989d4b22669014859135e89ced24bbac3af1d1a4a76ff5736f81fdc461d2f96cebc5f36eacae7981e7ea59443448fa1", 16);
BigInteger privateExponent = new BigInteger("009c46140920e6c881bc405f7e1ff5e32f0cafcaa4912af8cc6840d4cc0f6b76e3079abb3d022dec246686249773707efd9ebcfa19102edc46948650e49232888116e4b54fe77b6eaf5061db4f50c89646241559f602d477efb0d6b755a67a40e978753f56d16142660c47bc91408cf01deaaf3f30180050e2730980e9498cdd3d", 16);

    RSAPrivateKeySpec privateKeySpec = new RSAPrivateKeySpec(modulus, privateExponent);
    KeyFactory keyFactory = KeyFactory.getInstance("RSA");
    PrivateKey privateKey = keyFactory.generatePrivate(privateKeySpec);
    //用SHA-256做摘要
    MessageDigest md= MessageDigest.getInstance("SHA-256");
    data=md.digest(data);
    // 签名
    Signature instance = Signature.getInstance("SHA1withRSA");
    instance.initSign(privateKey);
    instance.update(data);
    byte[] sing  = instance.sign();
    System.out.println(byteArr2HexString(sing));
}
// 以下为调用到的公共方法
public static String byteArr2HexString(byte[] bytearr) {
    if (bytearr == null) {
        return "null";
    }
    StringBuffer sb = new StringBuffer();
    for (int k = 0; k < bytearr.length; k++) {
        if ((bytearr[k] & 0xFF) < 16) {
            sb.append("0");
        }
        sb.append(Integer.toString(bytearr[k] & 0xFF, 16));
    }
    return sb.toString();
}

}

2个回答


        private string CreateSignature(string baseString, string pathToPrivateKey)
        {
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            using (StreamReader sr = new StreamReader(pathToPrivateKey))
            {
                PemReader pr = new PemReader(sr);
                RSAParameters keyParameters = DotNetUtilities.ToRSAParameters((RsaPrivateCrtKeyParameters)pr.ReadObject());

                rsa.ImportParameters(keyParameters);
            }
            var signData = rsa.SignData(Encoding.UTF8.GetBytes(baseString), HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
            return Convert.ToBase64String(signData);
        }
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
c#关于rsa加密算法不填充请教
现在有个项目需要对数据进行rsa加密,但c#的RSACryptoServiceProvider类方法Decrypt支持的填充模式是OAEP或PKCS#1 1.5 版填充,而他们要求pkcs11的填充方式,所以总是提示不正确的数据,请问各位大神c#如何解决这个问题
C# RSA 和 java 互通 C# 将java 的私钥 和 明文 加密
C# 将java 的私钥 和 明文 加密 C# 将java 的私钥 和 明文 加密 C# 将java 的私钥 和 明文 加密 C# 将java 的私钥 和 明文 加密 C# 将java 的私钥 和 明文 加密 C# 将java 的私钥 和 明文 加密
使用SHA-1通过RSA进行数据的加解密、或者叫做数字签名。通过C++进行编写。求大神帮忙
通过网上下载了几个SHA-1的数据,都运行不了。有大神可以帮我编写一个可以运行的SHA-1也可以。 我需要的是通过SHA-1对RSA进行包装。 达成一个简单数字签名的小程序。有大神帮我,另有重谢(必须要能实现运行的,自己手残调试不好)
RSA数字签名算法演示程序实现 (python)
调用编程语言现有的RSA接口,完成数字签名产生和验证的演示程序实现。 ![图片说明](https://img-ask.csdn.net/upload/201709/27/1506503880_870831.jpg) 基本要求: 1、RSA算法实现可以直接调用编程语言提供的接口函数实现,不需要自行编写密码算法; 2、RSA密钥对的数据可以从文件读取和存储 3、发送方和接收方的数据传输方面,可以是C/S模式,也可以是B/S模式进行传输;(需要网络编程) 4、界面设计要求: 1)RSA密钥对简单生成过程的图形化演示,密钥对可以用文件形式保存和读取 2)采用图形化在界面中完整的演示RSA的数字签名过程(如图所示),发方的签名消息可以采用文件形式保存进行,接收方可以读取文件获得签名消息和公钥。 3)接收方和发送方数据传输采用网络编程实现
银联支付 rsa C#解密问题
银联那边是用java写的,生成的公钥是一段字符串,但是C#去解密,方法在provider.FromXmlString 出现错误 查找原因,原来java和C#的公钥格式问题,如何把java的公钥转换成C#的xml格式的公钥?
RSA疑问: Java私钥加密, C#公钥解密,有好的解决方案么?
各位大神帮帮忙: 有下面两段java代码: ``` 证书签名方法(加密) 1)将data(根据规范要求决定是否和timestamp拼接在一起)做hash 2)使用用户私钥key对hash做加密。 3)加密的结果用hex编码 其中data代表要签名的数据,timestamp代表时间戳,key代表证书的私钥 public class Sign implements ISign { public String sign(String data, long timestamp, PrivateKey key) throws Exception { return sign(data.getBytes("utf-8"), timestamp, key); } public String sign(String data, PrivateKey key) throws Exception{ return sign(data.getBytes("utf-8"), 0, key); } public String sign(byte [] data, PrivateKey key) throws Exception { return sign(data, 0, key); } public String sign(byte [] data, long timestamp, PrivateKey key) throws Exception { MessageDigest md = MessageDigest.getInstance("SHA-256"); md.update(data); if(timestamp > 0){ md.update(EncodeUtil.toBE(timestamp)); } byte[] hash = md.digest(); Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.ENCRYPT_MODE, key); byte[] encrypted = cipher.doFinal(hash); return HexBin.encode(encrypted); } } EncodeUtil.toBE: public class EncodeUtil { public static byte[] toBE(long data) { String ts = String.valueOf(data); if (ts.length() >= 13){ //平台http协议加密用,平台时间戳毫秒13位 byte[] buffer = new byte[8]; buffer[0] = (byte)(data >>> 56); buffer[1] = (byte)(data >>> 48); buffer[2] = (byte)(data >>> 40); buffer[3] = (byte)(data >>> 32); buffer[4] = (byte)(data >>> 24); buffer[5] = (byte)(data >>> 16); buffer[6] = (byte)(data >>> 8); buffer[7] = (byte)(data >>> 0); }else{ //终端tcp协议加密用,终端时间戳秒10位 byte[] buffer = new byte[4]; buffer[0] = (byte)(data >>> 24); buffer[1] = (byte)(data >>> 16); buffer[2] = (byte)(data >>> 8); buffer[3] = (byte)(data >>> 0); } return buffer; } } ``` ``` 验证签名方法(解密) 1)将data和timestamp(如果有)拼接在一起做hash 2)对encodedEncryptedStr做hex解码 3)使用证书验证数据的有效性(比较hash) 其中data代表要被解密的数据,timestamp代表时间戳,encodedEncryptedStr代表签名之后的串,userCert代表用公钥生成的X509Certificate对象。 public class Verify implements IVerify { public boolean verify(String data, long timestamp, String encodedEncryptedStr, X509Certificate userCert) throws Exception { return verify(data.getBytes("utf-8"), timestamp, encodedEncryptedStr, userCert); } public boolean verify(String data, String encodedEncryptedStr, X509Certificate userCert) throws Exception { return verify(data.getBytes("utf-8"), 0, encodedEncryptedStr, userCert); } public boolean verify(byte [] data, String encodedEncryptedStr, X509Certificate userCert) throws Exception{ return verify(data, encodedEncryptedStr, userCert); } public boolean verify(byte [] data, long timestamp, String encodedEncryptedStr, X509Certificate userCert) throws Exception { MessageDigest md = MessageDigest.getInstance("SHA-256"); md.update(data); if(timestamp > 0){ md.update(EncodeUtil.toBE(timestamp)); } byte[] hash = md.digest(); byte[] encryptedStr = HexBin.decode(encodedEncryptedStr); Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.DECRYPT_MODE, userCert); byte[] plain = cipher.doFinal(encryptedStr); boolean ok = Arrays.equals(hash, plain); return ok; } } ``` 现在需要将第二部分 解密用c# 实现 ,有什么好的思路吗?真心求教!
求助! 报文使用SHA1RSA 算法进行签名,签名的格式规范是PKCS#7遇到的问题
求助用PHP做项目时遇到个rsa 加密问题 文档中说要使用 SHA1RSA 算法 格式规范是PKCS#7 我使用了 openssl_pkcs7_sign 函数 由于对方提供的私钥是pfx 格式的 我先用openssl_pkcs12_read 取到pem 再用openssl_pkcs7_sign函数如下 openssl_pkcs12_read(file_get_contents($this->path), $certs, $this->pswd); openssl_pkcs7_sign($data,$signature,$certs['cert'], $certs['pkey'], N ULL,PKCS7_NOATTR); $signature = file_get_contents($signature); $result = base64_encode($signature); 可是最后的结果和对方给的java demo 结果不一样 java中的加密函数 代码如下: ![图片说明](https://img-ask.csdn.net/upload/201706/29/1498729791_345515.png) 求助求助!!!!!!!!!!!!!!!!!!! 百度了好几天 没解决
java中rsa算法没有#1的么??
java中rsa算法没有#1的么??网上大部分例子都是#8的,有些虽然没写#8,但实际上运行的还是#8的。我在java中能找到PKCS8EncodedKeySpec这个类,但是找不到 PKCS1EncodedKeySpec这个类??求解啊~~
Nginx+php7,为什么根目录的可以打开PHP文件,子目录就没有办法解析php文件,救急~
配置文件全部内容如下: server{ listen 443; server_name www.11law.cn 11law.cn; root /home/wwwroot/domain/11law; # 该项要修改为你准备存放相关网页的路径 ssl on; ssl_certificate ------------------; ssl_certificate_key -----------------; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA; ssl_session_cache shared:SSL:50m; ssl_prefer_server_ciphers on; location / { index index.php index.html index.htm; #如果请求既不是一个文件,也不是一个目录,则执行一下重写规则 } #proxy the php scripts to php-fpm location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ^~ /data/runtime { return 404; } location ^~ /application { return 404; } location ^~ /simplewind { return 404; } }
用C#添加数字签名的XML无法被java验签
由java方提供的公钥和私钥,然后我通过开源dll将其转换成了.net 可用的XML格式公钥和私钥, 解析出来的base64结果也和java放解析出来的一样,但是用转换后的私钥对XML进行RSA方式签名后,却只有Net能验签通过,Java验签总是失败的.
阿里云+nginx+ssl+https配置后,网页依旧无法显示,请大神指教
阿里云+nginx+ssl配置后,网页依旧无法显示,请大神指教 域名已经解析 ![图片说明](https://img-ask.csdn.net/upload/202002/09/1581225059_616698.png) 服务器相关端口已打开 ![图片说明](https://img-ask.csdn.net/upload/202002/09/1581231238_906425.png) 系统是unbuntu16,nginx版本为1.15,已有ssl模块 ![图片说明](https://img-ask.csdn.net/upload/202002/09/1581225248_962076.png) ssl证书有上传至服务器 ![图片说明](https://img-ask.csdn.net/upload/202002/09/1581225321_579997.png) nginx的配置文件nginx.conf内容如下 ``` #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; # server { # listen 80; # server_name localhost; # #charset koi8-r; # #access_log logs/host.access.log main; # location / { # root html; # index index.html index.htm; # } # #error_page 404 /404.html; # # redirect server error pages to the static page /50x.html # # # error_page 500 502 503 504 /50x.html; # location = /50x.html { # root html; # } # # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # # # #location ~ \.php$ { # # proxy_pass http://127.0.0.1; # #} # # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # # # #location ~ \.php$ { # # root html; # # fastcgi_pass 127.0.0.1:9000; # # fastcgi_index index.php; # # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # # include fastcgi_params; # #} # # deny access to .htaccess files, if Apache's document root # # concurs with nginx's one # # # #location ~ /\.ht { # # deny all; # #} # } # another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen 8000; # listen somename:8080; # server_name somename alias another.alias; # location / { # root html; # index index.html index.htm; # } #} # HTTPS server # server { listen 443 ssl; server_name www.faceanalyze.club faceanalyze.club; ssl_certificate /usr/local/nginx/cert/cert.pem; ssl_certificate_key /usr/local/nginx/cert/cert.key; # ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location / { root html; index index.html index.htm; } } server { listen 80; server_name www.faceanalyze.club faceanalyze.club; return 301 https://$server_name$request_uri; } } ``` nginx有重新加载配置,端口使用情况如下 ![图片说明](https://img-ask.csdn.net/upload/202002/09/1581225719_742816.png) 用浏览器查看时,无法显示 ![图片说明](https://img-ask.csdn.net/upload/202002/09/1581225832_412617.png) 请大神求解!谢谢
C# 微信付款到个人银行 RSA公钥问题
微信官方文档:https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=24_7&index=4 我按照文档的提示已经获取到RSA公钥,然后再通过openssl命令将公钥转换,PKCS#8时,openssl则会报错: unable to load Public Key 220:error:0906D06C:PEM routines:PEM_read_bio:no start line:.\crypto\pem\pem_lib.c:708:Expecting: RSA PUBLIC KEY 请教各位高人指教!
C# 支付宝接口签名生产问题
![图片说明](https://img-ask.csdn.net/upload/201507/17/1437113980_839893.png) 如图: 在调用支付宝接口代码RSA中的签名代码时报错。怎么解决?
sha1 我要怎么做才能变成sha256
//openssl genrsa -passout pass:Lvp@1001 -des3 -out RootCA.key 1024 //openssl req -new -x509 -days 3650 -passin pass:Lvp@1001 -key RootCA.key -sha256 -subj /C=CN/L=ShenZhen/O=LeagSoft -out RootCA.crt //openssl.exe genrsa -passout pass:Lvp@1001 -sha256 -out secondCA.key 2048 //openssl rsa -passin pass:Lvp@1001 -in secondCA.key -out secondCA.key //openssl req -new -config openssl.cnf -subj /C=CN/L=ShenZhen/O=LeagSoft/CN=www.baidu.com -days 1826 -key secondCA.key -sha256 -out secondCA.csr //openssl.exe ca -passin pass:Lvp@1001 -extensions v3_ca -batch -config ./openssl.cnf -in ./secondCA.csr -days 1826 -out ./secondCA.crt -cert ./RootCA.crt -keyfile ./RootCA.key 这样生成 的二级证书 的 签名算法 依然还是 sha1 我要怎么做才能变成sha256 呢
jsch密钥交换失败,无法登陆ssh
INFO: Connecting to 192.168.170.124 port 22 INFO: Connection established INFO: Remote version string: SSH-2.0-OpenSSH_7.2 INFO: Local version string: SSH-2.0-JSCH-0.1.53 INFO: CheckCiphers: aes256-ctr,aes192-ctr,aes128-ctr,aes256-cbc,aes192-cbc,aes128-cbc,3des-ctr,arcfour,arcfour128,arcfour256 INFO: aes256-ctr is not available. INFO: aes192-ctr is not available. INFO: aes256-cbc is not available. INFO: aes192-cbc is not available. INFO: CheckKexes: diffie-hellman-group14-sha1,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521 INFO: diffie-hellman-group14-sha1 is not available. INFO: ecdh-sha2-nistp256 is not available. INFO: ecdh-sha2-nistp384 is not available. INFO: ecdh-sha2-nistp521 is not available. INFO: CheckSignatures: ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521 INFO: ecdsa-sha2-nistp256 is not available. INFO: ecdsa-sha2-nistp384 is not available. INFO: ecdsa-sha2-nistp521 is not available. INFO: SSH_MSG_KEXINIT sent INFO: SSH_MSG_KEXINIT received INFO: kex: server: curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1 INFO: kex: server: ssh-rsa,rsa-sha2-512,rsa-sha2-256,ssh-ed25519 INFO: kex: server: chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr INFO: kex: server: chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr INFO: kex: server: umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1 INFO: kex: server: umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1 INFO: kex: server: none,zlib@openssh.com INFO: kex: server: none,zlib@openssh.com INFO: kex: server: INFO: kex: server: INFO: kex: client: diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1 INFO: kex: client: ssh-rsa,ssh-dss INFO: kex: client: aes128-ctr,aes128-cbc,3des-ctr,3des-cbc,blowfish-cbc INFO: kex: client: aes128-ctr,aes128-cbc,3des-ctr,3des-cbc,blowfish-cbc INFO: kex: client: hmac-md5,hmac-sha1,hmac-sha2-256,hmac-sha1-96,hmac-md5-96 INFO: kex: client: hmac-md5,hmac-sha1,hmac-sha2-256,hmac-sha1-96,hmac-md5-96 INFO: kex: client: none INFO: kex: client: none INFO: kex: client: INFO: kex: client: INFO: kex: server->client aes128-ctr hmac-sha1 none INFO: kex: client->server aes128-ctr hmac-sha1 none INFO: SSH_MSG_KEX_DH_GEX_REQUEST(1024<1024<1024) sent INFO: expecting SSH_MSG_KEX_DH_GEX_GROUP INFO: Disconnecting from 192.168.170.124 port 22 com.jcraft.jsch.JSchException: Session.connect: java.io.IOException: End of IO Stream Read 有大神解决这个问题了吗
如何实现报文的签名和验签
1.1 报文签名验签 # 报文签名采用标准XML文件格式格式(参照W3C标准)。 1.2 数据签名 从xml报文中,取指定节点数据(带有标签,不带命名空间),直接拼接后形成待签名数据源,然后再进行签名。 数据签名采用标准的PKCS#1格式。 数字签名前要对源数据使用SHA-1数据摘要算法作HASH运算,再用签名私钥作RSA运算,结果即为对数据的“数字签名”。下面记DATA为待签名数据, SHA(…)为HASH函数,RSA(…)为RSA运算函数,SIGN为签名结果。数字签名过程为:_ (1) 用SHA-1摘要算法对需要签名的数据(DATA)进行HASH运算,生成20字节HASH结果: H = SHA(DATA) H为20字节 (2) 按PKCS#1标准对HASH结果作填充 B = 00 01 00 ff ff … ff 00 30 21 30 09 06 05 2B 0E 03 02 1A 05 00 04 14 H[00], H[01], …, H[13] (3) 使用私钥(记作pvk)对填充后的数据块作RSA运算,生成128字节签名结果: SIGN = RSApvk(B) SIGN为128字节 (4) 将签名结果(128字节)进行Base64转换,生成172字节签名结果串。 (5) 172字节签名结果串即为签名结果。 1.3 数据验签 从xml报文中,取指定节点数据(带有标签,不带命名空间),直接拼接后形成验签数据源,从报文中取签名结果。 接收方根据接收报文中的签名者信息(SignerID、KeyName),查找对应的证书及公钥,然后使用该公钥对签名进行验证。 从接收报文中取签名结果,记为SIGN,签名原数据为DATA,验签公钥为pbk,则验证签名的流程为: _(1) 将Base64格式的签名结果串转换为128字节二进制数据。 (2) 使用公钥对签名结果作RSA公钥解密运算并去掉填充: H’ = RSApbk(SIGN) (3) 对签名原数据作HASH运算: H = SHA(DATA) (4) 比较H与H’, 如相等,则验证正确,否则验证错误。 _
c#用httpwebrequest如何模拟抓取这样的网页信息
c#用httpwebrequest如何模拟抓取这样的网页信息,下面内容是用fiddler抓取的。 CONNECT user.cloudcall.hk:8080 HTTP/1.0 User-Agent: Mozilla/4.0 (compatible; MSIE 6.0;Windows NT 5.1) AppleWebKit Host: user.cloudcall.hk:8080 Content-Length: 0 Connection: Keep-Alive Pragma: no-cache A SSLv3-compatible ClientHello handshake was found. Fiddler extracted the parameters below. Version: 3.1 (TLS/1.0) Random: 52 79 06 13 A5 00 6B A2 19 9E 99 D6 BA E3 7E 93 BD 8B A1 26 18 3A 21 E7 F0 31 4C 4F 58 4A 41 73 SessionID: empty Extensions: renegotiation_info 00 server_name user.cloudcall.hk status_request 01 00 00 00 00 elliptic_curves 00 04 00 17 00 18 ec_point_formats 01 00 Ciphers: [002F] TLS_RSA_AES_128_SHA [0035] TLS_RSA_AES_256_SHA [0005] SSL_RSA_WITH_RC4_128_SHA [000A] SSL_RSA_WITH_3DES_EDE_SHA [C013] TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA [C014] TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA [C009] TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA [C00A] TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA [0032] TLS_DHE_DSS_WITH_AES_128_SHA [0038] TLS_DHE_DSS_WITH_AES_256_SHA [0013] SSL_DHE_DSS_WITH_3DES_EDE_SHA [0004] SSL_RSA_WITH_RC4_128_MD5 Compression: [00] NO_COMPRESSION
JAVA里的rsa公钥加密128位的明文加出来的结果一定是512位的密文吗?可以加出来256位的密文么?
1.明文:[1111111111111111 ] 补空格至128位,rsa公钥加密后: 公钥为:-----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDZWHcxw/xXAB/8bquCnLrQ6QYafG9bcZZ4mq+A6GBn3QtW5Sia3JPERW0qD62/4PuNOXqKTj3cw4RnYYr29gZXv/F8DfmY1UpfQkJxLC9az4f9eEiuEm5axMzpl5V4BNpnVgnmDTRAv45ZKj+V6k9TZ8rVVSQqTEGLTQkpU38QIDAQAB -----END PUBLIC KEY----- 密文为:B4671AABC963BAEFED0B43E0704090F018EE19CB09172E74DAC27130A44AFF6060C118B79369E682C05B88404882B39374A0BB2ECEB8DAAA53C3F3F51B51D796540316BC2D89DD320DADBFD74B62A27C30BC162B936DFE16894E0F825CD6337D1E3F550685C901422355AB94EB5152DB305617155BF463D8CE98162D2A456351 试了各种方法,只有填充方式为RSA/ECB/nopadding时,每次加密的结果才保持一致,其他情况,每次加密的结果都不同; 由于rsa加密在明文大小超过117时会分段加密,所以我现在128加出来的密文是512位的, 请问各位大佬,怎么才能加出来上述miwen
C# winform程序实现JAVA josn 请求接
第一次写winfrom 不知道怎么写,以下是给的接口说明 HTTP请求方式:GET http://ip:port/lanshuijsdService/3.0/hts/queryCyr?param_key=?&secret_key=? 1) 注意: 以JSON格式传入输入参数 1) 请求参数 参数名称 类型 必需 描述 param_key 字符串 是 输入参数值 secret_key 字符串 是 Md5摘要信息 Param_key中包含的输入json中的字段描述如下: 参数名称 类型 必需 描述 meraccount string 是 商户账户(321000000) method string 是 API的资源操作方法名(queryCyr) timestamp number 是 用户发起请求时的unix时间戳。 v number 是 API版本号,默认使用最高版本(1.0)。 ⦁ 请求示例: 将param_key内的json中元素按照参数名排序,并按照“参数=参数值”的模式用“&”字符拼接成字符串后进行MD5,以形成secret_key值 param_key值=RSA(URLEncoder ({”name2”:”value2”, “name1”:”value1”,”name3”:”value3”},”UTF-8”)) secret_key值= URLEncoder (md5(name1=value1& name2=value2&name3=value3) ,”UTF-8”) ⦁ 签名算法 服务API使用的签名算法如下: ⦁ 获取请求的HTTP method; ⦁ 获取请求的URL,包括host和scheme,但不包括query_string的部分 ⦁ 将所有参数(包括GET或POST的参数,但不包含签名字段)格式化为“key=value”格式,如“k1=v1”、“k2=v2”、“k3=v3”; ⦁ 将格式化好的参数键值对以字典序升序排列后,拼接在一起,如“k1=v1&k2=v2&k3=v3”,并将HTTP method和URL按顺序拼接在这个字符串前面; ⦁ 在拼接好的字符串末尾追加上应用的secret_key,并进行urlencode形成base_string; ⦁ 上述字符串的MD5值即为签名的值: sign= urlencode(MD5(k1=v1&k2=v2&k3=v3)); ⦁ 安全加密 为了确保敏感数据的可靠传输。必须对传输数据使用RSA的公钥进行非对称加密,私钥由服务提供方妥善保管,公钥由客户端经过身份验证之后获得。安全加密算法如下: RSA(URLEncoder ({”name2”:”value2”, “name1”:”value1”,”name3”:”value3”},”UTF-8”)) 分配的RSA公钥如下: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCsoGCMo/XE+fNlLQBLK4VBYe8pVZe71Eb5fZOxd213vvshmWA/9c+vSM/uUAcD/W/It+xnJE1TECCTbV6uCqgfmrztwe2OQS2kGhLPGIYfo9ha2NufghUNAHAB9M0m1lp7y2m8T27iPhy 下面我写的代码: string strURL = "http://192.168.200.207:8088/lsjsdService/3.0/hts/queryJsd?param_key="; string md5 = "MIGfMA0GCSqGSIb3DQEBAQUAA4GyRRxv35xuamvvnzQDOerH3yrrCLnJ6bQIDAQAB"; string pk="{\"val\":\"200005719465\",\"scode\":\"321000006\",\"date\":\"20180625\",\"flag\":\"0\",\"meraccount\":\"321000000\",\"method\":\"queryJsd\",\"v\":\"3.0\",\"timestamp\":\"20180707\",}"; string param_key = ToUrlEncode(pk); string sk = "var=200005719465&scode=321000006&date=20180625&flag=0&meraccount=321000000&method=queryJsd&v=3.0&timestamp=20180707"; string secret_key = sign(sk, md5, "UTF-8"); strURL = "http://192.168.200.207:8088/lsjsdService/3.0/hts/queryJsd?param_key=" + param_key + "&secret_key=" + secret_key; string h = HttpApi(strURL, "{}", "get"); public static string ToUrlEncode(string strCode) { StringBuilder sb = new StringBuilder(); byte[] byStr = System.Text.Encoding.UTF8.GetBytes(strCode); //默认是System.Text.Encoding.Default.GetBytes(str) System.Text.RegularExpressions.Regex regKey = new System.Text.RegularExpressions.Regex("^[A-Za-z0-9]+$"); for (int i = 0; i < byStr.Length; i++) { string strBy = Convert.ToChar(byStr[i]).ToString(); if (regKey.IsMatch(strBy)) { //是字母或者数字则不进行转换 sb.Append(strBy); } else { sb.Append(@"%" + Convert.ToString(byStr[i], 16)); } } return (sb.ToString()); } public static string sign(string content, string privateKey, string input_charset) { Encoding code = Encoding.GetEncoding(input_charset); byte[] Data = code.GetBytes(content); RSACryptoServiceProvider rsa = DecodePemPrivateKey(privateKey); SHA1 sh = new SHA1CryptoServiceProvider(); byte[] signData = rsa.SignData(Data, sh); return Convert.ToBase64String(signData); } /// <summary> /// 调用api返回json /// </summary> /// <param name="url">api地址</param> /// <param name="jsonstr">接收参数</param> /// <param name="type">类型</param> /// <returns></returns> public static string HttpApi(string url, string jsonstr, string type) { Encoding encoding = Encoding.UTF8; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);//webrequest请求api地址 request.Accept = "text/html,application/xhtml+xml,*/*"; request.ContentType = "application/json"; request.Method = type.ToUpper().ToString();//get或者post byte[] buffer = encoding.GetBytes(jsonstr); request.ContentLength = buffer.Length; request.GetRequestStream().Write(buffer, 0, buffer.Length); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8)) { return reader.ReadToEnd(); } } 文档里说的:param_key,secret_key 这两个值我都不知道我转换对没?以上我拼接的字符串正确吗?sign方法老是报错 ![图片说明](https://img-ask.csdn.net/upload/201807/08/1531032895_957209.png) 请大神帮忙指教下。
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私...
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小人工智障。 思路可以运用在不同地方,主要介绍的是思路。
面试官问我:什么是消息队列?什么场景需要他?用了会出现什么问题?
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式和人才交流群,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸...
8年经验面试官详解 Java 面试秘诀
作者 |胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。 Java程序员准备和投递简历的实...
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观...
MyBatis研习录(01)——MyBatis概述与入门
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis原本是apache的一个开源项目iBatis, 2010年该项目由apache software foundation 迁移到了google code并改名为MyBatis 。2013年11月MyBatis又迁移到Github。
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip installselenium -ihttps://pypi.tuna.tsinghua.edu.cn/simple/ ...
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca...
Python爬虫精简步骤1 获取数据
爬虫,从本质上来说,就是利用程序在网上拿到对我们有价值的数据。 爬虫能做很多事,能做商业分析,也能做生活助手,比如:分析北京近两年二手房成交均价是多少?广州的Python工程师平均薪资是多少?北京哪家餐厅粤菜最好吃?等等。 这是个人利用爬虫所做到的事情,而公司,同样可以利用爬虫来实现巨大的商业价值。比如你所熟悉的搜索引擎——百度和谷歌,它们的核心技术之一也是爬虫,而且是超级爬虫。 从搜索巨头到人工...
Python绘图,圣诞树,花,爱心 | Turtle篇
每周每日,分享Python实战代码,入门资料,进阶资料,基础语法,爬虫,数据分析,web网站,机器学习,深度学习等等。 公众号回复【进群】沟通交流吧,QQ扫码进群学习吧 微信群 QQ群 1.画圣诞树 import turtle screen = turtle.Screen() screen.setup(800,600) circle = turtle.Turtle()...
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东...
破14亿,Python分析我国存在哪些人口危机!
一、背景 二、爬取数据 三、数据分析 1、总人口 2、男女人口比例 3、人口城镇化 4、人口增长率 5、人口老化(抚养比) 6、各省人口 7、世界人口 四、遇到的问题 遇到的问题 1、数据分页,需要获取从1949-2018年数据,观察到有近20年参数:LAST20,由此推测获取近70年的参数可设置为:LAST70 2、2019年数据没有放上去,可以手动添加上去 3、将数据进行 行列转换 4、列名...
web前端javascript+jquery知识点总结
1.Javascript 语法.用途 javascript 在前端网页中占有非常重要的地位,可以用于验证表单,制作特效等功能,它是一种描述语言,也是一种基于对象(Object)和事件驱动并具有安全性的脚本语言 ...
Python实战:抓肺炎疫情实时数据,画2019-nCoV疫情地图
今天,群里白垩老师问如何用python画武汉肺炎疫情地图。白垩老师是研究海洋生态与地球生物的学者,国家重点实验室成员,于不惑之年学习python,实为我等学习楷模。先前我并没有关注武汉肺炎的具体数据,也没有画过类似的数据分布图。于是就拿了两个小时,专门研究了一下,遂成此文。
听说想当黑客的都玩过这个Monyer游戏(1~14攻略)
第零关 进入传送门开始第0关(游戏链接) 请点击链接进入第1关: 连接在左边→ ←连接在右边 看不到啊。。。。(只能看到一堆大佬做完的留名,也能看到菜鸡的我,在后面~~) 直接fn+f12吧 &lt;span&gt;连接在左边→&lt;/span&gt; &lt;a href="first.php"&gt;&lt;/a&gt; &lt;span&gt;←连接在右边&lt;/span&gt; o...
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ...... ...
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!...
渗透测试-灰鸽子远控木马
木马概述 灰鸽子( Huigezi),原本该软件适用于公司和家庭管理,其功能十分强大,不但能监视摄像头、键盘记录、监控桌面、文件操作等。还提供了黑客专用功能,如:伪装系统图标、随意更换启动项名称和表述、随意更换端口、运行后自删除、毫无提示安装等,并采用反弹链接这种缺陷设计,使得使用者拥有最高权限,一经破解即无法控制。最终导致被黑客恶意使用。原作者的灰鸽子被定义为是一款集多种控制方式于一体的木马程序...
Python:爬取疫情每日数据
前言 目前每天各大平台,如腾讯、今日头条都会更新疫情每日数据,他们的数据源都是一样的,主要都是通过各地的卫健委官网通报。 以全国、湖北和上海为例,分别为以下三个网站: 国家卫健委官网:http://www.nhc.gov.cn/xcs/yqtb/list_gzbd.shtml 湖北卫健委官网:http://wjw.hubei.gov.cn/bmdt/ztzl/fkxxgzbdgrfyyq/xxfb...
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。 再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。 下文是原回答,希望能对你能有所启发。 如果我说,这个世界上人真的分三六九等,...
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合...
雷火神山直播超两亿,Web播放器事件监听是怎么实现的?
Web播放器解决了在手机浏览器和PC浏览器上播放音视频数据的问题,让视音频内容可以不依赖用户安装App,就能进行播放以及在社交平台进行传播。在视频业务大数据平台中,播放数据的统计分析非常重要,所以Web播放器在使用过程中,需要对其内部的数据进行收集并上报至服务端,此时,就需要对发生在其内部的一些播放行为进行事件监听。 那么Web播放器事件监听是怎么实现的呢? 01 监听事件明细表 名...
3万字总结,Mysql优化之精髓
本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降。 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计...
Python新型冠状病毒疫情数据自动爬取+统计+发送报告+数据屏幕(三)发送篇
今天介绍的项目是使用 Itchat 发送统计报告 项目功能设计: 定时爬取疫情数据存入Mysql 进行数据分析制作疫情报告 使用itchat给亲人朋友发送分析报告 基于Django做数据屏幕 使用Tableau做数据分析 来看看最终效果 目前已经完成,预计2月12日前更新 使用 itchat 发送数据统计报告 itchat 是一个基于 web微信的一个框架,但微信官方并不允许使用这...
作为程序员的我,大学四年一直自学,全靠这些实用工具和学习网站!
我本人因为高中沉迷于爱情,导致学业荒废,后来高考,毫无疑问进入了一所普普通通的大学,实在惭愧???? 我又是那么好强,现在学历不行,没办法改变的事情了,所以,进入大学开始,我就下定决心,一定要让自己掌握更多的技能,尤其选择了计算机这个行业,一定要多学习技术。 在进入大学学习不久后,我就认清了一个现实:我这个大学的整体教学质量和学习风气,真的一言难尽,懂的人自然知道怎么回事? 怎么办?我该如何更好的提升自...
粒子群算法求解物流配送路线问题(python)
1.Matlab实现粒子群算法的程序代码:https://www.cnblogs.com/kexinxin/p/9858664.html matlab代码求解函数最优值:https://blog.csdn.net/zyqblog/article/details/80829043 讲解通俗易懂,有数学实例的博文:https://blog.csdn.net/daaikuaichuan/article/...
教你如何编写第一个简单的爬虫
很多人知道爬虫,也很想利用爬虫去爬取自己想要的数据,那么爬虫到底怎么用呢?今天就教大家编写一个简单的爬虫。 下面以爬取笔者的个人博客网站为例获取第一篇文章的标题名称,教大家学会一个简单的爬虫。 第一步:获取页面 #!/usr/bin/python # coding: utf-8 import requests #引入包requests link = "http://www.santostang....
前端JS初级面试题二 (。•ˇ‸ˇ•。)老铁们!快来瞧瞧自己都会了么
1. 传统事件绑定和符合W3C标准的事件绑定有什么区别? 传统事件绑定 &lt;div onclick=""&gt;123&lt;/div&gt; div1.onclick = function(){}; &lt;button onmouseover=""&gt;&lt;/button&gt; 注意: 如果给同一个元素绑定了两次或多次相同类型的事件,那么后面的绑定会覆盖前面的绑定 (不支持DOM事...
相关热词 c#导入fbx c#中屏蔽键盘某个键 c#正态概率密度 c#和数据库登陆界面设计 c# 高斯消去法 c# codedom c#读取cad文件文本 c# 控制全局鼠标移动 c# temp 目录 bytes初始化 c#
立即提问