关于java自带RSA密钥包生成的私钥公钥加密不了,求大神帮忙看一下

我用JAVA生成了一个公钥如下:
System.out.println(publicKey.getPublicKey());

输出:modulus:154308594144468705348294760484396264219304223307125368116140288659005422830
11489867478404495635728307309845313276126541903154766024976823588585215138754477992
96802915396931308077347778973425837411602815233405546695183536389616670156153124753
50767041053961957188628650343640790505255765999004862716823611888529

public exponent: 65537

用这个modulus的值加密不了,我看网上的公钥都是这样子的5q4F3crOuN4OG68Dko7EZl5wYn+FokohvMm6m/NFmMJIGBhYnJ9/8JKQMxndka8GafQ9BU/LASFtvbrfNsyA6TfP2wMalewfWF0GBT5AviGouGqt9I9BMrvBfTttU5OMqD2rF+fQ23WMTi+UYzY/9kZB7Rys7A1oIFWnsnB0Jnc=AQAB

请问这个modulus是不是要转换一下 怎么转换呢?有没懂的大神帮下忙

1个回答

模加密是:BigInteger n=pbk.getModulus();
System.out.println("e= "+e);
System.out.println("n= "+n);
// 明文 m
byte ptext[]=s.getBytes("UTF8");
BigInteger m=new BigInteger(ptext);
// 计算密文c,打印
BigInteger c=m.modPow(e,n);
System.out.println("c= "+c);

下面的格式是Base64格式的:
RSAPublicKey pbk=(RSAPublicKey) x509.getPublicKey();
System.out.println(Base64.encode(pbk.getEncoded()));

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
RSA简单实现公钥私钥正确为何加密解密后不一致?

import java.math.BigInteger; import java.security.SecureRandom; import java.util.Date; public class RSA { private BigInteger p,q,n,d; private BigInteger e=new BigInteger("65537"); private static BigInteger y; private static BigInteger x; private void getPrime(int length){ SecureRandom random=new SecureRandom(); random.setSeed(new Date().getTime()); while((p=BigInteger.probablePrime(length, random)).isProbablePrime(1)==false) { continue; } while((q=BigInteger.probablePrime(length, random)).isProbablePrime(1)==false) { continue; } } public static BigInteger e_gcd(BigInteger a,BigInteger b){ if(b.intValue()==0){ x=new BigInteger("1"); y=new BigInteger("0"); return a; } BigInteger ans=e_gcd(b, a.mod(b)); BigInteger tmp=x; x=y; y=tmp.subtract(a.divide(b).multiply(y)); // System.out.println("tmp= "+tmp); // System.out.println("gcd a="+a+" gcd b="+b+" gcd x="+x+" gcd y="+y); // //System.out.println("gcd y="+y); // return ans; } BigInteger cald(BigInteger e,BigInteger n){ BigInteger gcd=e_gcd(e, n); if(BigInteger.ONE.mod(gcd).intValue()!=0) return new BigInteger("-1"); x.multiply(BigInteger.ONE.divide(gcd)); n=n.abs(); BigInteger ans=x.mod(n); if(ans.compareTo(BigInteger.ZERO)<0) ans.add(n); return ans; } public BigInteger getp(){ return p; } public BigInteger getq(){ return q; } public BigInteger getn(){ return n; } public BigInteger gete(){ return e; } public BigInteger getd(){ return d; } public RSA(int length){ getPrime(length/2); n=p.multiply(q); d=cald(e, n); //System.out.println("test : "+e.multiply(d).mod(n)); } public RSA() { getPrime(128); n=p.multiply(q); //d=cald(e, n); BigInteger tmp=p.subtract(BigInteger.ONE).multiply(q.subtract(BigInteger.ONE)); d=e.modPow(tmp.subtract(BigInteger.ONE),n ); } public static void main(String[] args) { // TODO Auto-generated method stub RSA rsa=new RSA(20); System.out.println("P= " +rsa.getp()); System.out.println("Q= " +rsa.getq()); System.out.println("E= " +rsa.gete()); System.out.println("N= " +rsa.getn()); System.out.println("D= " +rsa.getd()); BigInteger test=new BigInteger("100"); System.out.println("test:"+rsa.gete().multiply(rsa.getd()).mod(rsa.getn())); BigInteger testc=test.modPow(rsa.getd(),rsa.getn()); testc=testc.modPow(rsa.gete(),rsa.getn()); boolean flag =testc.equals(test); System.out.println(flag); } } 代码如上,e*d=1(mod n)成立了,为何在加解密之后不一致呢??

求私钥加密 公钥解密 函数

c++源码 较多 全部 放在博客上了 http://blog.csdn.net/d2262272d/article/details/51614515

JAVA和IOS对接RSA加密问题

公司开发IOS APP,跟JAVA后台对接。在加密方面,使用的是RSA。在JAVA端生成的公钥和私钥,通过BASE64转成字符串。然后在IOS端,如果直接拿着这个转化的字符串密钥(通过BASE64解密后)去做RSA加密的话,这边JAVA端解密会失败。所以,请问下,在密钥方面应该怎么处理呢?JAVA端生成的密钥怎样处理给到IOS端才会成功?谢谢!

java 如何实现PEM格式的RSA加密和解密

思路是: 1、先用.NET生成XML格式的公钥和密钥 ``` /// <summary> ///在给定路径中生成XML格式的私钥和公钥。 /// </summary> public void GenerateKeys(string path) { using (var rsa = new RSACryptoServiceProvider(RsaKeySize)) { try { // 获取私钥和公钥。 var publicKey = rsa.ToXmlString(false); var privateKey = rsa.ToXmlString(true); // 保存到磁盘 File.WriteAllText(Path.Combine(path, publicKeyFileName), publicKey); File.WriteAllText(Path.Combine(path, privateKeyFileName), privateKey); MessageBox.Show(string.Format("生成的RSA密钥的路径: {0}\\ [{1}, {2}]", path, publicKeyFileName, privateKeyFileName)); } finally { rsa.PersistKeyInCsp = false; } } } ``` 2、再用BouncyCastle将XML的公钥和密钥转成PEM格式的 ``` /// <summary> /// RSA私钥格式转换,.net->java /// </summary> /// <param name="privateKey">.net生成的私钥</param> /// <returns></returns> public static string RSAPrivateKeyDotNet2Java(string privateKey) { XmlDocument doc = new XmlDocument(); doc.LoadXml(privateKey); BigInteger m = new BigInteger(1, Convert.FromBase64String(doc.DocumentElement.GetElementsByTagName("Modulus")[0].InnerText)); BigInteger exp = new BigInteger(1, Convert.FromBase64String(doc.DocumentElement.GetElementsByTagName("Exponent")[0].InnerText)); BigInteger d = new BigInteger(1, Convert.FromBase64String(doc.DocumentElement.GetElementsByTagName("D")[0].InnerText)); BigInteger p = new BigInteger(1, Convert.FromBase64String(doc.DocumentElement.GetElementsByTagName("P")[0].InnerText)); BigInteger q = new BigInteger(1, Convert.FromBase64String(doc.DocumentElement.GetElementsByTagName("Q")[0].InnerText)); BigInteger dp = new BigInteger(1, Convert.FromBase64String(doc.DocumentElement.GetElementsByTagName("DP")[0].InnerText)); BigInteger dq = new BigInteger(1, Convert.FromBase64String(doc.DocumentElement.GetElementsByTagName("DQ")[0].InnerText)); BigInteger qinv = new BigInteger(1, Convert.FromBase64String(doc.DocumentElement.GetElementsByTagName("InverseQ")[0].InnerText)); RsaPrivateCrtKeyParameters privateKeyParam = new RsaPrivateCrtKeyParameters(m, exp, d, p, q, dp, dq, qinv); PrivateKeyInfo privateKeyInfo = PrivateKeyInfoFactory.CreatePrivateKeyInfo(privateKeyParam); byte[] serializedPrivateBytes = privateKeyInfo.ToAsn1Object().GetEncoded(); return Convert.ToBase64String(serializedPrivateBytes); } /// <summary> /// RSA公钥格式转换,.net->java /// </summary> /// <param name="publicKey">.net生成的公钥</param> /// <returns></returns> public static string RSAPublicKeyDotNet2Java(string publicKey) { XmlDocument doc = new XmlDocument(); doc.LoadXml(publicKey); BigInteger m = new BigInteger(1, Convert.FromBase64String(doc.DocumentElement.GetElementsByTagName("Modulus")[0].InnerText)); BigInteger p = new BigInteger(1, Convert.FromBase64String(doc.DocumentElement.GetElementsByTagName("Exponent")[0].InnerText)); RsaKeyParameters pub = new RsaKeyParameters(false, m, p); SubjectPublicKeyInfo publicKeyInfo = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(pub); byte[] serializedPublicBytes = publicKeyInfo.ToAsn1Object().GetDerEncoded(); return Convert.ToBase64String(serializedPublicBytes); } ``` 3、然后java怎么利用我转换成PEM格式的公钥密钥进行加密和解密,使得跟.NET的一样?

RSA算法如何生成一个长度较短的秘钥

正在使用RSA算法生成秘钥,但是生成的秘钥是在太长,有知道如何生成短一些的秘钥的吗

C++ 用openssl RSA 私钥解密

微信企业号,聊天记录提取:需要提供一个公钥给微信,他们用公钥加密聊天记录,然后我们再用私钥进行解密聊天保存。 用http://tool.chacuo.net/cryptrsapubkey这个网站生成了一对2048为的RSA密钥对,密钥格式为PKCS1。 公钥如下: -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxGzyp9l2CbGYVu8+8T9c XAnjNB7KCun6fH2j1u/8if29GxeJz/uU73lcIgewJN1z3gfZT29xoPSM3hlvoDG8 e4Kv20BWP63wr8cS5qwEuIno2IOwnhq0Mq09kylDdX9NwVnobLd110q34lN9iNzr 0csWzX07rYDWso4iuUuOTgXKxyQS34/Azgaea88hQLnCCw9YB2ocs1W0lSjhq5Gn k5FZZEhMe5UwaZI2ZgdKrBqSVQvMOxB57eBb6ofLPoDyx8DEkJmz4I6b61P/S7ZL x+Kz7nMCik/OGsJu4Cyr5CEebWyNuZzu9JyhfFc2aGGHda6Ph2/SpVjC15wGDnQL AwIDAQAB -----END PUBLIC KEY----- 加密字符串如下: bESlD7OobKjYMww9swtL6zmWvXl4mrraUt/XJvQpVbpK5u8rUP25/PJDOZms+3LF/3L2sXKj5QjUDPvQbi1ZvLBHB7fcUF59qAILIuOBi8NEgVrw6lx4CClhQciDK9FedcEkRIx/T0zuPiSNJmOyUAhYaJRG2/Xh5Mn+oMJ2LPohq5QWbd9eq17eKdY9LDKmcyoMGqCEt1iBPd1KXqHOsd79ca8aHwXdVH+mrYhHJYT5gZYwylX7LloXRevbFhFxSrFFpDNRRaSuW9vecwwO5EhUun1KoxTB3MYR3cLGowyJ+LFT1iQczr/TFW7EW1egFfeAmy9v6q8ae7blnARedw== 私钥如下: -----BEGIN RSA PRIVATE KEY----- MIIEpQIBAAKCAQEAxGzyp9l2CbGYVu8+8T9cXAnjNB7KCun6fH2j1u/8if29GxeJ z/uU73lcIgewJN1z3gfZT29xoPSM3hlvoDG8e4Kv20BWP63wr8cS5qwEuIno2IOw nhq0Mq09kylDdX9NwVnobLd110q34lN9iNzr0csWzX07rYDWso4iuUuOTgXKxyQS 34/Azgaea88hQLnCCw9YB2ocs1W0lSjhq5Gnk5FZZEhMe5UwaZI2ZgdKrBqSVQvM OxB57eBb6ofLPoDyx8DEkJmz4I6b61P/S7ZLx+Kz7nMCik/OGsJu4Cyr5CEebWyN uZzu9JyhfFc2aGGHda6Ph2/SpVjC15wGDnQLAwIDAQABAoIBAQC5cy8qf+qsvkrZ ESp49NxLXV5wj/0rjrranHh6brwcwD6xfGi1v45fBlKRIncQZzCE2R43nD1IvHrf Gl7EfRC5/6nus/B6UMvj+W0D8jbG0BXRjYvLyeSF0ABJl3TEUzvjJ/KD6jZM3JN+ EFt+Qy42NatCuVEFv5V0oTNxhD9HsxC+hNvOQYUyIXNoSjXQA3VNgPrBavWpLX9d 2lwWxabu2/TcqDdhv0fB035RBNEDNzfWHmmlgfqaFDGlS+lbg6+ym46YuyX5axiw Im0xLuk8RpJ+cP2s56A4PKKwnReAdxWsJqZLeAqQ2hdepTc2TXslq9FUu/btg37f nGqcpazpAoGBAPeKLsmXE9SbL6ZqdgWOT0bY9SiFSMc4P21xB9VkoHuA71881ymt +jZSfyQyXSr1NM/bDStx4n9WmFoIfD2lstIGkURrieoaKb2SCuzQLJOIcsBV12Zz Gk+JrRxgfPqow9x/G3BVnoYird69zEo279CI0xaIYW2fZbEv7vnihmBXAoGBAMsj jEyPOTnv6TAChDLR3fy0NYhU+vBSSreDz6ZGFSO6zyRS419wzjQrjr6w4bFcvkBt 4R8M8Wx/KlXS+oiMK2IrX9QQ6eloMJrUe8lp/a4n7fbo/JsYD10lRa8v9LQGxY5X 1ck/k0J1cW4zyg4vBE7gv1N58Gu2HfrunTq8yw81AoGBAJMH+dh1qyq6bqgrTiTo rYAIeD30RRFIAKyx2ZRPq98P656nFapFE3zWrXxDigFtGkxn8T+f6of2WJIJvjoj xL5pdjmsooNxvN9D8sdMs12CS56gnkvVDIi33yIe0b1VJtk+in7D7GACE0JdfA2M 6g70ZmVY5n3lktKXBRxaB7ULAoGAKOMLzzEYvJ+cWOx4vV3eh4miKMGqDIsTvOJL /lSm1p04KkCAwWoMJxYJUjp6At/+7yrun/hT85mY5NNlV+yWotjGHgIVgsRU3CUe kUjDJbWlwQfeKD1sgjwJTZyibUXbp63oOuyP8FWBMkQ8TCSMgm/cMqodiSCL4kD6 5qKvYG0CgYEAj/v1QKuEEfm1YkkgDtiD68Eq0HDl58n6VS+GM8HLPQb/nUpdFN4z MDHY4cWb+Bt2M2csOcvx2N2Xsl3a/G0Q05q6OCmw/utCGdlHxo+ROPKZssIRYgO/ 67TdgZsRggEa66U2wSIoxBmfsD/qy42k9cYdl1rarTryuU2iJm2/+Ms= -----END RSA PRIVATE KEY----- 我利用openssl库进行解密,代码如下: // 私钥解密,cipherText--待解密字符串; priKey--私钥 std::string rsa_pri_decrypt(const std::string &cipherText, const std::string &priKey) { std::string strRet; RSA *rsa = RSA_new(); BIO *keybio; keybio = BIO_new_mem_buf((void *)priKey.c_str(), -1); // 读取私钥成RSA rsa = PEM_read_bio_RSAPrivateKey(keybio, &rsa, NULL, NULL); // 分配大小 int len = RSA_size(rsa); char *decryptedText = (char *)malloc(len + 1); memset(decryptedText, 0, len + 1); // 解密函数 int ret = RSA_private_decrypt(cipherText.length(), (const unsigned char*)cipherText.c_str(), (unsigned char*)decryptedText, rsa, RSA_PKCS1_PADDING); unsigned long error = ERR_peek_last_error(); if (ret >= 0) strRet = std::string(decryptedText, ret); // 释放内存 free(decryptedText); BIO_free_all(keybio); RSA_free(rsa); return strRet; } 得到的解密结果是解密失败,请问是哪里需要调整?

与公钥和私钥以及JWT相关的混乱

<div class="post-text" itemprop="text"> <p>I'm trying out JWT (JSON Web Tokens) in a Go web service. Here's what I've done so far:</p> <pre><code>package jwt import( "fmt" "net/http" "github.com/gorilla/mux" "github.com/dgrijalva/jwt-go" "io/ioutil" ) var privateKey []byte var publicKey []byte func JSONWebTokensHandler(w http.ResponseWriter, r * http.Request){ // Create the token encodeToken := jwt.New(jwt.SigningMethodHS256) // Set some claims encodeToken.Claims["Latitude"] = "25.000" encodeToken.Claims["Longitude"] = "27.000" // Sign and get the complete encoded token as a string tokenString, err := encodeToken.SignedString(privateKey) decodeToken, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) { if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok { return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"]) } return publicKey,nil }) if decodeToken.Valid { fmt.Fprintf(w,"Lat: %s, Lng: %s",decodeToken.Claims["Latitude"],decodeToken.Claims["Longitude"]) } else { fmt.Fprintf(w,"Couldn't handle this token: %s", err) } } func init(){ privateKey,_ = ioutil.ReadFile("demo.rsa") publicKey,_ = ioutil.ReadFile("demo.rsa.pub") r := mux.NewRouter() r.HandleFunc("/jwt",JSONWebTokensHandler).Methods("GET") http.Handle("/", r) } </code></pre> <p>Now if my understanding is correct, A token that is encoded using a private key can be decoded using the public key. That is what I've presumed in the code above however when I run the code I get the error:</p> <blockquote> <p>Couldn't handle this token: signature is invalid</p> </blockquote> <p>If I use the same key for encoding and decoding, then the code works.</p> <p>What I'd like to know is, is there something wrong with my understanding or in the code? </p> </div>

如何从文件读取RSA密钥

<div class="post-text" itemprop="text"> <p>I need to read in an RSA private key from a file to sign a JWT. I have found some examples on how to save a generated RSA key to disk but nothing showing how to build a key struct based on a pre-generated key from a file.</p> <p>The key is generated like this:</p> <pre> openssl genrsa 2048 | openssl pkcs8 -topk8 -nocrypt </pre> <p>Example key:</p> <pre> -----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQClHYNDPVSF‌​FmWF oKGTqd/n7Dt2+tGXh97KJjVLAqCBZZHlQJ534v2OzFjTgzuMNehD9Y6HnkYF‌​dkRb QzYi2YDROOzRl1bhyyWPA35OGf50r7LiNvSvNPNtswsCuK7ywOcH0yEMKSiW‌​4q5R GKYi42w961EcTQQPrfihavY+c2FYPv4+pXymzaIz9hGBPLHwaHq/QTAyHxPC‌​fkOo s/x3mxUVd7Ni2bz1VJGlyqcNEeU88wTAYMmv8oQ3y2NfKExtYn+W6TCDiq/+‌​ZkOp wacuAU0J7tCNgcXvkq39KH5uza2uSiTniye6uhlkvYWD3s9riIIiekTEiHk/‌​kkc6 jMg8HN/7AgMBAAECggEBAJ12u8vQHV6esUrymaTdCG+BVmRtZpyA ... -----END RSA PRIVATE KEY----- </pre> </div>

前端js 进行rsa加密的问题

情况大致如下: 1.前端需要对传输内容进行加密 ,采用加密方式为RSA加密 2.从后端能获取的数据 有: 1:RSA 模数 2: 公钥指数 仅仅能获取到这两个 求问: 前端如何计算出 publicKey ?

本人新手 需要一个C++的RSA加解密的代码

是这样 我在C#里用了RSACryptoServiceProvider这个内置类来进行rsa的加解密 得到的公钥私钥都是 ```<RSAKeyValue><Modulus>0uvlo0Zxoe/chymnFQBBoSqm0XM3N8HK6UGv/9Rj21HlaUaXq/LSGA/CQItY1LAbzKlc+FFnnkCJwGJONvTiFPZaiHzifVZ8Dnv07XUiV1NGu8Wwt3ZvFvbl4SdKdktm/H5crECBw6OJuUUR3eImDSBPG/+4nerI9cgOen5iu/0=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue> ``` 像这个样子 本人刚自学了C++ 很多东西还是一头雾水,想要您帮我找一个可以在C#上面加密的 在Linux/Mac上可以解密的 可以传入参数 例如512/1024/2048/4096位长的密钥长度 可以传入公钥加密 私钥解密 像C#里那样好用就好!

在web应用中,RSA及DES的密钥需要一段时间更换一次吗

在app和服务器交互过程中,RSA及DES的密钥需要一段时间更换一次吗,还是可以长时间使用相同的密钥,如果长时间使用相同的密钥,那可不可以直接把应用需要的私钥或公钥写在程序中,而不使用传输来获取?

使用正则表达式检测私有和公共RSA密钥

<div class="post-text" itemprop="text"> <p>I've searched over the internet but with no results, There is any pattern (to be implemented in regex) to detect RSA private or public keys ?</p> <p>(not included strings such as ---- Public RSA key-- or "ssh rsa")</p> <p>I'm stuck after create base64 regex </p> <pre><code>var re = regexp.MustCompile(`(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3})=`) </code></pre> <p>Thanks</p> </div>

设RSA的公钥(N,e),N=55,e=3;私钥(N,d).N=55,d=27;设需要加密的数X=17,写出用公钥对X加密成Y的计算过程,写出用私钥对Y解密成X的计算过程。

设RSA的公钥(N,e),N=55,e=3;私钥(N,d).N=55,d=27;设需要加密的数X=17,写出用公钥对X加密成Y的计算过程,写出用私钥对Y解密成X的计算过程。

RSA的公私钥到底能不能设置有效期?(非证书)

通过openssl生成的RSA的公私钥到底能不能设置有效期?是否存在失效时间 ?如果有该怎么设置?求解。

已知RSA密码中,公钥n=33685247,b=8829979,密文c=2,则明文m=?

已知RSA密码中,公钥n=33685247,b=8829979,密文c=2,则明文m=?

从文件加载加密的PKCS1私钥

<div class="post-text" itemprop="text"> <p>I have a PKCS1 private key in a file and I load it using </p> <pre><code>b, err := ioutil.ReadFile(path) if err != nil { return nil, err } </code></pre> <p>Then, I try to convert it into private key object</p> <pre><code>block, _ := pem.Decode(b) der, err := x509.DecryptPEMBlock(block, []byte("qwerty")) if err != nil { return nil, err } bytes := pem.EncodeToMemory(&amp;pem.Block{Type: "RSA PRIVATE KEY", Bytes: der}) return x509.ParsePKCS1PrivateKey(bytes) </code></pre> <p>But this code throws exception in <code>DecryptPEMBlock</code> </p> <pre><code>x509: no DEK-Info header in block </code></pre> <p>I didn't find any documentation about this in golang</p> </div>

如何安全地存储加密密钥?

<div class="post-text" itemprop="text"> <p>I am using MySQL as a back end storage. I was asked by our risk management team to encrypt all the data prior storing it into the database. </p> <p>Since then I have been doing research on how to secure the data going in and out the database.</p> <p>I found couple ways one of them was <a href="http://netlib.com/mysql-encryption.asp" rel="nofollow">MySQL Encryption Software</a></p> <p>A second solution was to encrypt and decrypt data in MySQL using <a href="http://dev.mysql.com/doc/refman/5.6/en/encryption-functions.html#function_aes-encrypt" rel="nofollow">AES_ENCRYPT()</a> AND <a href="http://dev.mysql.com/doc/refman/5.6/en/encryption-functions.html#function_aes-decrypt" rel="nofollow">AES_DECRYPT()</a>. But I will need to create a 128,196 or 256 bit key in order to be able to encrypt and decrypt the data. Then every time I want to execute <code>INSERT/UPDATE</code> I will call <code>AES_ENCRYPT()</code> and supply it with a key to encrypt the data. Then when I execute <code>SELECT</code> then I will have to call <code>AES_DECRYPT()</code> and supply the same key to convert the data to a plain text. </p> <p>This means that I will have to define a variable in my PHP script that have the private key so I can encrypt/decrypt by supplying the defined variable to both <code>AES_ENCRYPT()</code> and <code>AES_DECRYPT()</code></p> <p>My question is Where/How to a store this private key to prevent a hacker from reading it. if someone hacks my server reads the key then he can simply read the data and the encryption would be mean less.</p> <p>And what is the best way to go about securing my data?</p> <p>Thank you</p> </div>

C使用openssl RSA base64对数据进行加密解密出错

对数据进行RSA base64加密的时候没有出错,但是在解码base64的时候解码出来的字符串为空。 附代码,求大佬帮忙看一下: ``` int base64_encode(char *in_str, int in_len, char *out_str) { BIO *b64, *bio; BUF_MEM *bptr = NULL; size_t size = 0; if (in_str == NULL || out_str == NULL) return -1; b64 = BIO_new(BIO_f_base64()); bio = BIO_new(BIO_s_mem()); bio = BIO_push(b64, bio); BIO_write(bio, in_str, in_len); BIO_flush(bio); BIO_get_mem_ptr(bio, &bptr); memcpy(out_str, bptr->data, bptr->length); out_str[bptr->length] = '\0'; size = bptr->length; BIO_free_all(bio); return size; } ``` ``` int base64_decode(char *in_str, int in_len, char *out_str) { BIO *b64, *bio; BUF_MEM *bptr = NULL; int counts; int size = 0; if (in_str == NULL || out_str == NULL) return -1; b64 = BIO_new(BIO_f_base64()); BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL); bio = BIO_new_mem_buf(in_str, in_len); bio = BIO_push(b64, bio); size = BIO_read(bio, out_str, in_len); out_str[size] = '\0'; BIO_free_all(bio); return size; } ``` ``` unsigned char *my_encrypt(char *str,char *path_key){ char *p_en; RSA *p_rsa; FILE *file,*p_file; int flen,rsa_len; if((file=fopen(path_key,"r"))==NULL){ perror("open key file error"); return NULL; } if((p_rsa=PEM_read_RSA_PUBKEY(file,NULL,NULL,NULL))==NULL){//PUBLIC KEY // if((p_rsa=PEM_read_RSAPublicKey(file,NULL,NULL,NULL))==NULL){//RSA PUBLIC KEY ERR_print_errors_fp(stdout); return NULL; } flen=strlen(str); rsa_len=RSA_size(p_rsa); p_en=(unsigned char *)malloc(rsa_len+1); memset(p_en,0,rsa_len+1); if(RSA_public_encrypt(rsa_len,(unsigned char *)str,(unsigned char*)p_en,p_rsa,RSA_NO_PADDING)<0){ return NULL; } RSA_free(p_rsa); fclose(file); // p_file=fopen("./p_file.txt","w"); // fputs(p_en, p_file); return p_en; } ``` ``` char *my_decrypt(unsigned char *str,char *path_key){ char *p_de; RSA *p_rsa; FILE *file; int rsa_len; if((file=fopen(path_key,"r"))==NULL){ perror("open key file error"); return NULL; } if((p_rsa=PEM_read_RSAPrivateKey(file,NULL,NULL,NULL))==NULL){ ERR_print_errors_fp(stdout); return NULL; } rsa_len=RSA_size(p_rsa); p_de=(unsigned char *)malloc(rsa_len+1); memset(p_de,0,rsa_len+1); if(RSA_private_decrypt(rsa_len,(unsigned char *)str,(unsigned char*)p_de,p_rsa,RSA_NO_PADDING)<0){ return NULL; } RSA_free(p_rsa); fclose(file); return p_de; } ``` ``` main{ char source[1024]="hello"; char *ptr_en,*ptr_de, base64_en[1024] = "", base64_de[1024] = ""; printf("source is    :%s\n",source); ptr_en=my_encrypt(source,PUBLICKEY); printf("ptr_en strlen = %d\n", strlen(ptr_en)); printf("after encrypt:%s\n",ptr_en); base64_encode(ptr_en,strlen(ptr_en),base64_en); printf("after encode len: %d\nmsg:%s\n",strlen(base64_en), base64_en); base64_decode(base64_en,strlen(base64_en),base64_de); printf("after decode len: %d\nmsg:%s\n",strlen(base64_de), base64_de);//len输出长度为0 数据为空 ptr_de=my_decrypt(base64_de,OPENSSLKEY); printf("ptr_de strlen = %d\n", strlen(ptr_de)); printf("after decrypt:%s\n",ptr_de); if(ptr_en!=NULL){ free(ptr_en); } if(ptr_de!=NULL){ free(ptr_de); } return 0; } ``` base64_decode解码后长度为0,数据为空。当他们单独使用的加密解密的时候没问题,合起来就会出现这个情况,求大佬看一下 ,非常感谢

带有rsa密钥的Golang软件包jwt-go。 如何放置公钥以及如何从令牌中获取公钥?

<div class="post-text" itemprop="text"> <p>I'm trying to generate a token with a rsa key using the jwt-go package in golang. <a href="https://sendgrid.com/blog/tokens-tokens-intro-json-web-tokens-jwt-go/" rel="nofollow">Here</a> there is a blog explaining how to do it but that code will always be validating all tokens because is using the public key stored in the server and is not obtaining it from the token. How do you put the complete public key in the token? I was trying this:</p> <pre><code>var secretKey, _ = rsa.GenerateKey(rand.Reader, 1024) token := jwt.New(jwt.SigningMethodRS256) token.Claims["username"] = "victorsamuelmd" token.Claims["N"] = secretKey.PublicKey.N token.Claims["E"] = secretKey.PublicKey.E tokenString, err := token.SignedString(secretKey) nt, err := jwt.Parse(tokenString, func(t *jwt.Token) (interface{}, error) { // here I need to recover the public key from the token // but N is a big.Int and the token stores N as int64 }) </code></pre> <p>Sorry about my english. Thanks.</p> </div>

Python可以这样学(第一季:Python内功修炼)

董付国系列教材《Python程序设计基础》、《Python程序设计(第2版)》、《Python可以这样学》配套视频,讲解Python 3.5.x和3.6.x语法、内置对象用法、选择与循环以及函数设计与使用、lambda表达式用法、字符串与正则表达式应用、面向对象编程、文本文件与二进制文件操作、目录操作与系统运维、异常处理结构。

获取Linux下Ftp目录树并逐步绑定到treeview

在linux下抓取目录树,双击后获取该节点子节点(逐步生成)。另外有两个类,一个是windows下的(一次性获取目录树),一个是linux下的(足部获取目录树)

NS网络模拟和协议仿真源代码

NS网络模拟和协议仿真源代码,包含代码说明及协议分析

简单的NS3网络模拟仿真(计算机网络作业)

简单的NS3网络模拟仿真,内附有PPT演示。论文评述。以及简单的安装教程。

手把手实现Java图书管理系统(附源码)

【超实用课程内容】 本课程演示的是一套基于Java的SSM框架实现的图书管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的java人群。详细介绍了图书管理系统的实现,包括:环境搭建、系统业务、技术实现、项目运行、功能演示、系统扩展等,以通俗易懂的方式,手把手的带你从零开始运行本套图书管理系统,该项目附带全部源码可作为毕设使用。 【课程如何观看?】 PC端:https://edu.csdn.net/course/detail/27513 移动端:CSDN 学院APP(注意不是CSDN APP哦) 本课程为录播课,课程2年有效观看时长,大家可以抓紧时间学习后一起讨论哦~ 【学员专享增值服务】 源码开放 课件、课程案例代码完全开放给你,你可以根据所学知识,自行修改、优化

三个项目玩转深度学习(附1G源码)

从事大数据与人工智能开发与实践约十年,钱老师亲自见证了大数据行业的发展与人工智能的从冷到热。事实证明,计算机技术的发展,算力突破,海量数据,机器人技术等,开启了第四次工业革命的序章。深度学习图像分类一直是人工智能的经典任务,是智慧零售、安防、无人驾驶等机器视觉应用领域的核心技术之一,掌握图像分类技术是机器视觉学习的重中之重。针对现有线上学习的特点与实际需求,我们开发了人工智能案例实战系列课程。打造:以项目案例实践为驱动的课程学习方式,覆盖了智能零售,智慧交通等常见领域,通过基础学习、项目案例实践、社群答疑,三维立体的方式,打造最好的学习效果。

150讲轻松搞定Python网络爬虫

【为什么学爬虫?】 &nbsp; &nbsp; &nbsp; &nbsp;1、爬虫入手容易,但是深入较难,如何写出高效率的爬虫,如何写出灵活性高可扩展的爬虫都是一项技术活。另外在爬虫过程中,经常容易遇到被反爬虫,比如字体反爬、IP识别、验证码等,如何层层攻克难点拿到想要的数据,这门课程,你都能学到! &nbsp; &nbsp; &nbsp; &nbsp;2、如果是作为一个其他行业的开发者,比如app开发,web开发,学习爬虫能让你加强对技术的认知,能够开发出更加安全的软件和网站 【课程设计】 一个完整的爬虫程序,无论大小,总体来说可以分成三个步骤,分别是: 网络请求:模拟浏览器的行为从网上抓取数据。 数据解析:将请求下来的数据进行过滤,提取我们想要的数据。 数据存储:将提取到的数据存储到硬盘或者内存中。比如用mysql数据库或者redis等。 那么本课程也是按照这几个步骤循序渐进的进行讲解,带领学生完整的掌握每个步骤的技术。另外,因为爬虫的多样性,在爬取的过程中可能会发生被反爬、效率低下等。因此我们又增加了两个章节用来提高爬虫程序的灵活性,分别是: 爬虫进阶:包括IP代理,多线程爬虫,图形验证码识别、JS加密解密、动态网页爬虫、字体反爬识别等。 Scrapy和分布式爬虫:Scrapy框架、Scrapy-redis组件、分布式爬虫等。 通过爬虫进阶的知识点我们能应付大量的反爬网站,而Scrapy框架作为一个专业的爬虫框架,使用他可以快速提高我们编写爬虫程序的效率和速度。另外如果一台机器不能满足你的需求,我们可以用分布式爬虫让多台机器帮助你快速爬取数据。 &nbsp; 从基础爬虫到商业化应用爬虫,本套课程满足您的所有需求! 【课程服务】 专属付费社群+每周三讨论会+1v1答疑

cuda开发cutilDLL

包括cutil32.dll、cutil32D.dll、cutil32.lib、cutil32D.lib,以及附带的glew32.lib/freeglut.lib

深度学习原理+项目实战+算法详解+主流框架(套餐)

深度学习系列课程从深度学习基础知识点开始讲解一步步进入神经网络的世界再到卷积和递归神经网络,详解各大经典网络架构。实战部分选择当下最火爆深度学习框架PyTorch与Tensorflow/Keras,全程实战演示框架核心使用与建模方法。项目实战部分选择计算机视觉与自然语言处理领域经典项目,从零开始详解算法原理,debug模式逐行代码解读。适合准备就业和转行的同学们加入学习! 建议按照下列课程顺序来进行学习 (1)掌握深度学习必备经典网络架构 (2)深度框架实战方法 (3)计算机视觉与自然语言处理项目实战。(按照课程排列顺序即可)

Tensorflow与python3.7适配版本

tensorflow与python3.7匹配的最新库,更新了python3.7以后可以自行下载,或者去国外python的扩展包下载界面自行下载。

4小时玩转微信小程序——基础入门与微信支付实战

这是一个门针对零基础学员学习微信小程序开发的视频教学课程。课程采用腾讯官方文档作为教程的唯一技术资料来源。杜绝网络上质量良莠不齐的资料给学员学习带来的障碍。 视频课程按照开发工具的下载、安装、使用、程序结构、视图层、逻辑层、微信小程序等几个部分组织课程,详细讲解整个小程序的开发过程

专为程序员设计的数学课

<p> 限时福利限时福利,<span>15000+程序员的选择!</span> </p> <p> 购课后添加学习助手(微信号:csdn590),按提示消息领取编程大礼包!并获取讲师答疑服务! </p> <p> <br> </p> <p> 套餐中一共包含5门程序员必学的数学课程(共47讲) </p> <p> 课程1:《零基础入门微积分》 </p> <p> 课程2:《数理统计与概率论》 </p> <p> 课程3:《代码学习线性代数》 </p> <p> 课程4:《数据处理的最优化》 </p> <p> 课程5:《马尔可夫随机过程》 </p> <p> <br> </p> <p> 哪些人适合学习这门课程? </p> <p> 1)大学生,平时只学习了数学理论,并未接触如何应用数学解决编程问题; </p> <p> 2)对算法、数据结构掌握程度薄弱的人,数学可以让你更好的理解算法、数据结构原理及应用; </p> <p> 3)看不懂大牛代码设计思想的人,因为所有的程序设计底层逻辑都是数学; </p> <p> 4)想学习新技术,如:人工智能、机器学习、深度学习等,这门课程是你的必修课程; </p> <p> 5)想修炼更好的编程内功,在遇到问题时可以灵活的应用数学思维解决问题。 </p> <p> <br> </p> <p> 在这门「专为程序员设计的数学课」系列课中,我们保证你能收获到这些:<br> <br> <span> </span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">①价值300元编程课程大礼包</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">②应用数学优化代码的实操方法</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">③数学理论在编程实战中的应用</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">④程序员必学的5大数学知识</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">⑤人工智能领域必修数学课</span> </p> <p> <br> 备注:此课程只讲程序员所需要的数学,即使你数学基础薄弱,也能听懂,只需要初中的数学知识就足矣。<br> <br> 如何听课? </p> <p> 1、登录CSDN学院 APP 在我的课程中进行学习; </p> <p> 2、登录CSDN学院官网。 </p> <p> <br> </p> <p> 购课后如何领取免费赠送的编程大礼包和加入答疑群? </p> <p> 购课后,添加助教微信:<span> csdn590</span>,按提示领取编程大礼包,或观看付费视频的第一节内容扫码进群答疑交流! </p> <p> <img src="https://img-bss.csdn.net/201912251155398753.jpg" alt=""> </p>

实现简单的文件系统

实验内容: 通过对具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统内部功能和实现过程的理解。 要求: 1.在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个简

机器学习初学者必会的案例精讲

通过六个实际的编码项目,带领同学入门人工智能。这些项目涉及机器学习(回归,分类,聚类),深度学习(神经网络),底层数学算法,Weka数据挖掘,利用Git开源项目实战等。

四分之一悬架模型simulink.7z

首先建立了四分之一车辆悬架系统的数学模型,应用MATLAB/Simulink软件建立该系统的仿真模型,并输入路面激励为随机激励,控制不同的悬架刚度和阻尼,选用最优的参数得到车辆悬架的振动加速度变化曲线

MFC一站式终极全套课程包

该套餐共包含从C小白到C++到MFC的全部课程,整套学下来绝对成为一名C++大牛!!!

C++语言基础视频教程

C++语言基础视频培训课程:本课与主讲者在大学开出的程序设计课程直接对接,准确把握知识点,注重教学视频与实践体系的结合,帮助初学者有效学习。本教程详细介绍C++语言中的封装、数据隐藏、继承、多态的实现等入门知识;主要包括类的声明、对象定义、构造函数和析构函数、运算符重载、继承和派生、多态性实现等。 课程需要有C语言程序设计的基础(可以利用本人开出的《C语言与程序设计》系列课学习)。学习者能够通过实践的方式,学会利用C++语言解决问题,具备进一步学习利用C++开发应用程序的基础。

Java8零基础入门视频教程

这门课程基于主流的java8平台,由浅入深的详细讲解了java SE的开发技术,可以使java方向的入门学员,快速扎实的掌握java开发技术!

HoloLens2开发入门教程

本课程为HoloLens2开发入门教程,讲解部署开发环境,安装VS2019,Unity版本,Windows SDK,创建Unity项目,讲解如何使用MRTK,编辑器模拟手势交互,打包VS工程并编译部署应用到HoloLens上等。

C/C++学习指南全套教程

C/C++学习的全套教程,从基本语法,基本原理,到界面开发、网络开发、Linux开发、安全算法,应用尽用。由毕业于清华大学的业内人士执课,为C/C++编程爱好者的教程。

pokemmo的资源

pokemmo必须的4个rom 分别为绿宝石 火红 心金 黑白 还有汉化补丁 资源不错哦 记得下载

test_head.py

本文件主要是针对使用dlib的imglab标注工具标记的目标检测框和关键点检测而生成的xml文件, 转换为coco数据集格式.

Java面试史上最全的JAVA专业术语面试100问 (前1-50)

前言: 说在前面, 面试题是根据一些朋友去面试提供的,再就是从网上整理了一些。 先更新50道,下一波吧后面的也更出来。 求赞求关注!! 废话也不多说,现在就来看看有哪些面试题 1、面向对象的特点有哪些? 抽象、继承、封装、多态。 2、接口和抽象类有什么联系和区别? 3、重载和重写有什么区别? 4、java有哪些基本数据类型? 5、数组有没有length()方法?String有没有length()方法? 数组没有length()方法,它有length属性。 String有length()方法。 集合求长度用

2019 AI开发者大会

2019 AI开发者大会(AI ProCon 2019)是由中国IT社区CSDN主办的AI技术与产业年度盛会。多年经验淬炼,如今蓄势待发:2019年9月6-7日,大会将有近百位中美顶尖AI专家、知名企业代表以及千余名AI开发者齐聚北京,进行技术解读和产业论证。我们不空谈口号,只谈技术,诚挚邀请AI业内人士一起共铸人工智能新篇章!

linux“开发工具三剑客”速成攻略

工欲善其事,必先利其器。Vim+Git+Makefile是Linux环境下嵌入式开发常用的工具。本专题主要面向初次接触Linux的新手,熟练掌握工作中常用的工具,在以后的学习和工作中提高效率。

DirectX修复工具V4.0增强版

DirectX修复工具(DirectX Repair)是一款系统级工具软件,简便易用。本程序为绿色版,无需安装,可直接运行。 本程序的主要功能是检测当前系统的DirectX状态,如果发现异常则进行修复

20行代码教你用python给证件照换底色

20行代码教你用python给证件照换底色

2019 Python开发者日-培训

本次活动将秉承“只讲技术,拒绝空谈”的理念,邀请十余位身处一线的Python技术专家,重点围绕Web开发、自动化运维、数据分析、人工智能等技术模块,分享真实生产环境中使用Python应对IT挑战的真知灼见。此外,针对不同层次的开发者,大会还安排了深度培训实操环节,为开发者们带来更多深度实战的机会。

我以为我对Mysql事务很熟,直到我遇到了阿里面试官

太惨了,面试又被吊打

相关热词 c#设计思想 c#正则表达式 转换 c#form复制 c#写web c# 柱形图 c# wcf 服务库 c#应用程序管理器 c#数组如何赋值给数组 c#序列化应用目的博客园 c# 设置当前标注样式
立即提问