使用Phpseclib在Java中加密并在PHP中解密

Edit 2: Problem has been solved. I didn't understand how the loadkey function in php was supposed to work and I mistakenly assumed it would read a key file (it does not). The solution was to read the contents of the file into a variable and then load the variable with loadkey.

Edit: The problem seems to be with the key. I realized that loadkey is returning false, indicating that it was unable to read the key. Could there be a difference in the formats accepted by phpseclib and the keys created in java?


I am trying to encrypt a AES key in Java (android) and decrypt it in PHP to use symmetric encryption for data transfer. Currently, I am able to encrypt and decrypt a short file or string using RSA in Java, but have not been able to decrypt it in PHP.

I am using phpseclib to decrypt in PHP, and i dont get any error, but my output string is null.

This is the code I am using:

Java:

File archivo_llave_publica = new File(direccion);
        byte[] bytes_llave = leer(archivo_llave_publica);
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");          
        EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(bytes_llave);
        PublicKey pubKey = keyFactory.generatePublic(publicKeySpec);
        Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
        cipher.init(Cipher.ENCRYPT_MODE, pubKey);
        byte[] cipherData = cipher.doFinal(src);
        return cipherData;

PHP:

<?php
include('./Crypt/RSA.php');

$rsa = new Crypt_RSA();
$rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
$rsa->loadKey('./key/Pri.txt'); // public key
$temprsa = $rsa->decrypt($key);
if ($temprsa==null){echo "null decrypt";}

Code used to generate keys:

public void generaArchivoLlaves(String pub_file, String pri_file){
    File LlavePrivada = new File(raiz.getAbsolutePath()+"/Bushfire/"+pri_file);
    File LlavePublica = new File(raiz.getAbsolutePath()+"/Bushfire/"+pub_file);
    try {
        KeyPair kp = generaLlaves();
        byte[] privateKeyBytes = kp.getPrivate().getEncoded();
        byte[] publicKeyBytes = kp.getPublic().getEncoded();
        Toast.makeText(this, "Privada:  "+kp.getPrivate().getFormat(), Toast.LENGTH_LONG).show();
        Toast.makeText(this, "Pública:  "+kp.getPublic().getFormat(), Toast.LENGTH_LONG).show();
        escribir(LlavePrivada, privateKeyBytes);
        escribir(LlavePublica, publicKeyBytes);
    }
    catch (NoSuchAlgorithmException e) {Toast.makeText(this, "Error al generar llave", Toast.LENGTH_LONG).show();}
}

public KeyPair generaLlaves() throws NoSuchAlgorithmException{
    KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
    kpg.initialize(2048);
    KeyPair kp = kpg.genKeyPair();  
    //Toast.makeText(this, "Se generó correctamente", Toast.LENGTH_LONG).show();
    return kp;

}

NOTE: Function escribir just writes the data byte by byte to a file.

What could be causing the problem?

douyangqian5243
douyangqian5243 你可以发一个示例密钥吗?很难说密钥格式是不受支持的,而不能看到它大声笑。
7 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Java编写数字加密解密

/* 整数加密/解密算法 设置一套针对非负整数的加密,解密算法 例如: 一个简单的映射算法,0->a,1->b, 2->c, 3->d, 4->e,5->f, 6->g, 7->h, 8->i,9->j encode(2756)->”chfg” decode(“bcea”)->1240 加分项:实现示例之外的其他加密/解密算法 //number>=0 public String encode(int number); public int decode(String numberStr); */

phpseclib / jsbn:使用PHP中的公钥加密,使用jsbn中的私钥解密

<div class="post-text" itemprop="text"> <p>I can successfully generate a public/private keypair using <a href="http://www-cs-students.stanford.edu/~tjw/jsbn/" rel="nofollow">jsbn</a> on the client side. Encrypting and decrypting client side with these keys is fine. I can also transmit that public key to the server and store it in MySQL via PHP. </p> <p>I cannot encrypt something in PHP using the jsbn public key, and then decrypt it client side using the jsbn private key. </p> <pre><code>// attempting to encrypt in PHP using the jsbn public key. // (this public key came from jsbn client side) $jsbn_public_key = '763989d1f75a779dae752ac236b011e85f9496bb414d72f5e89bf44274a942277fab2d4f5c58a57634d4000eecc8009d2efaeff17aa4a0efae2c4d41f3423be88be043628c6bac86f97deaadf23231793e6fa02550fb2ca65b2600e074205d23338e28ab3c5e92265e6bd7995c173085e3dc042e59ef464c5ed058c3ad863911'; $rsa = new Crypt_RSA(); $rsa-&gt;setPublicKeyFormat(CRYPT_RSA_PUBLIC_FORMAT_PKCS1); // tried various options here. $public_key = array( 'n' =&gt; new Math_BigInteger($jsbn_public_key, 16), 'e' =&gt; new Math_BigInteger('65537', 10), // same value as jsbn ); $rsa-&gt;loadKey($public_key,CRYPT_RSA_PUBLIC_FORMAT_RAW); // tried various options here. $ciphertext = $rsa-&gt;encrypt($value); $ciphertext_web_safe = bin2hex($ciphertext); // I think this is where the problem is! // $ciphertext_web_safe looks something like this: // 1b02bee0422028accba74f37e6e6974125fd16bdf83a72b8d6462e140ee6e85adae869fddc5e83635aaf90bc6074a3128890eeadf9537c33ebdfd665e16a3f1b617fa2fa5454f469e84f86d77ffcbc234dfc8a32291fbc84df61a0098c97fd90bb10204f68e783d9996678cd7853f3cbd932a4a067cb7f4f9eb62ca0542964f6 // which is exactly the same length as an encrypted string generated by jsbn </code></pre> <p>And here's the client side encryption:</p> <pre><code>var my_rsa = { .... e: "65537", public_key: '763989d1f75a779dae752ac236b011e85f9496bb414d72f5e89bf44274a942277fab2d4f5c58a57634d4000eecc8009d2efaeff17aa4a0efae2c4d41f3423be88be043628c6bac86f97deaadf23231793e6fa02550fb2ca65b2600e074205d23338e28ab3c5e92265e6bd7995c173085e3dc042e59ef464c5ed058c3ad863911', encrypt: function(value){ var rsakey = new RSAKey(); rsakey.setPublic(this.public_key, this.e); return rsakey.encrypt(value); }, decrypt: function(ciphertext){ var rsakey = new RSAKey(); rsakey.setPrivateEx(this.public_key, this.e, this.private_key.d, this.private_key.p, this.private_key.q, this.private_key.dmp1, this.private_key.dmq1, this.private_key.coeff); return rsakey.decrypt(ciphertext); }, .... }; </code></pre> <p>When I try to decrypt the '$ciphertext_web_safe' value in JavaScript I simply get an empty string. No errors in console log etc.. </p> <p>Is there a problem with the "bin2hex" used in PHP? Should there be some sort of padding etc.. applied before converting the encrypted binary data to hex? </p> <p>Cheers, Dave</p> </div>

求java中常用的加密、解密算法?

页面提交的密码、电话等信息通常需要加密后存放到数据库里,在个人信息展示时通常需要进行解密,如何实现?求案例或者思路。

有什么加密解密方法,在sql和java代码中都能使用的。

最近要做的一个需求是在已经做好的一个项目中,对某些表的某些字段的更新和查询进行加密解密操作,这些操作在存储过程和java代码都有。有没有一种加密解密方法在sql和java中都能使用的。

C#加密 Java解密 不成功

最近遇到一个问题 C#DES加密 A加密一段URL,发给B,B用的是Java解密,而A用的是C#加密 本来也没有多大问题,可是两边没有商榷好 解密:Java利用已有password生成密钥key, ``` KeyGenerator keyGenerator = KeyGenerator.getInstance(DES); keyGenerator.init(new SecureRandom(key)); SecretKey securekey = keyGenerator.generateKey(); // Cipher对象实际完成加密操作 Cipher cipher = Cipher.getInstance(DES); // 用密钥初始化Cipher对象 cipher.init(Cipher.DECRYPT_MODE, securekey);//, sr ``` 然而,C#中使用的是取已有password的前8个字节, B已与其他测试完毕,但与A仍无法解密成功。 所以,我想问,在B不变的情况下,A如何在C#的环境下,实现利用已有password生成密钥。。。。

关于PHP和JAVA之间的AES加密互通问题

公司今日接到一个需求,要与银行方面进行对接,接收银行方面 推送过来的加密信息,解密后入库进行统计,由于银行方是JAVA环境,我司是PHP环境,所以需要写一个PHP的解密方法,查阅各种文档后还是无法满足需求,无法进行解密,特来求助. 银行方只有一个加密流程文档: 加密方式:AES/ECB/PKCS5Padding 1、将data中的字段转成json格式如下: ``` {"userId":"12345678911111233","state":"2","cardNo":"625966","time":"20171212","extInfo":""} ``` 2、URLEncode对josn字符串进行编码UTF-8防止中文乱码 ``` URLEncoder.encode(data, "UTF-8") %7B%22userId%22%3A%2212345678911111233%22%2C%22state%22%3A%222%22%2C%22cardNo%22%3A%22625966%22%2C%22time%22%3A%2220171212%22%2C%22extInfo%22%3A%22%22%7D ``` 3、使用aesKey对URLEncode后的字符串进行AES加密, 得到data: ``` aesKey=Spdbccc-testtest XBD5nXa7oAnsWo/l843zUfmuhpmWGKEieJoJXxZEHPun1zfQhEPBFKv5kXZMM8i2Vr9RJwZeW/zn6OScGSlRTNVaytu2M5CDABw6B1grqxCqjTu/fKTp3hpMJd0riMB7H7ZK5xGUBu2nGgacjPmVcVl8Xm34fdArx17DkHbHqOWgiwmesk0C/lgKK7hkyuiuVtEQPmc02Ipjx3JGyJ+59g== ``` 我这边先是按照查询的文档中所说直接使用PHP自带的mcrypt扩展进行解密,发现php7.2已经弃用该扩展,换成openssl方式使用AES-128-ECB进行解密返回值是false;后来我转变思路,先用openssl以AES-128-ECB模式对第二步的串进行加密,获取到的结果和步骤三中的完全不一样,我改用先获取openssl的加密模式列表然后循环加密,输出各个加密方式的结果,发现没有一个能对上,到此以我的水平已经不知道该如何进行下一步了,特来求助!

java 上传图片 加密保存,及解密在前台页面展示

java 上传图片 加密保存,及解密后在前台页面展示。 上传图片后将图片加密保存在服务器,然后前端获取时解密显示在页面

我可以用Java进行RSA加密但是用PHP解密吗?

<div class="post-text" itemprop="text"> <p>Can I RSA-encrypt in J2ME or J2SE, and decrypt in PHP?</p> <p>I assume RSA is a specification, and has nothing to do with the languages.</p> </div>

java中的 DES 加密与解密

DES类 ---------------- package dao; import java.security.Security; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; public class DES { public static String ALGORITHM_DES="DES"; //加密算法的名称 public static KeyGenerator keygen; //密钥生成器 public static SecretKey secretKey; //密钥 public static Cipher cipher; //密码器 public byte[] bytes; static{ Security.addProvider(new com.sun.crypto.provider.SunJCE()); try{ keygen=KeyGenerator.getInstance(ALGORITHM_DES); secretKey=keygen.generateKey(); cipher=Cipher.getInstance(ALGORITHM_DES); }catch(Exception e){ e.printStackTrace(); } } //加密 public byte[] encryptor(String str){ try { cipher.init(Cipher.ENCRYPT_MODE, secretKey); //初始化密码器,用密钥 secretKey 进入加密模式 bytes=cipher.doFinal(str.getBytes()); //加密 } catch (Exception e) { e.printStackTrace(); } return bytes; } //解密 public String decryptor(byte[] buff){ try { cipher.init(Cipher.DECRYPT_MODE, secretKey); //初始化密码器,用密钥 secretKey 进入解密模式 bytes=cipher.doFinal(buff); } catch (Exception e) { e.printStackTrace(); } return (new String(bytes)); } } index.jsp ----------- ![index.jsp](https://img-ask.csdn.net/upload/201602/23/1456203162_827018.png) %> <a href="productAction-query?product_id=<%=des.encryptor(test) %>" target="_blank">Demo</a> Action类 ----------------------- ![Action类](https://img-ask.csdn.net/upload/201602/23/1456203135_614689.png) 我的问题:在 index.jsp 页面里提交的超链接 Demo 提交到 Action ,但是一点击,后台就报错: javax.crypto.IllegalBlockSizeException: Input length must be multiple of 8 when decrypting with padded cipher at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:750) at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:676) at com.sun.crypto.provider.DESCipher.engineDoFinal(DESCipher.java:314) at javax.crypto.Cipher.doFinal(Cipher.java:2087) at dao.DES.decryptor(DES.java:44) at filter.MyFilter.doFilter(MyFilter.java:36) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:521) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1096) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:674) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Unknown Source) java.lang.NullPointerException at java.lang.String.<init>(Unknown Source) at dao.DES.decryptor(DES.java:48) at filter.MyFilter.doFilter(MyFilter.java:36) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:521) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1096) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:674) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Unknown Source) 解密前:product_id=[B@3242ef 是哪里写的不对,请高手指点,我的目的是从 index.jsp 把值(product_id)进行加密,在 Action 里面取出 加密后的字符串,进行解密,但解密那一块有问题,可能是 DES 类写的有问题,请高手帮忙在原有的代码基础上修改。成分感激!!

关于java md5加密解密问题

我的md5已经可以成功加密,但是网上的人说md5是不可逆的算法,不能解密么,上次我已经解密了,不过我没有记下来,大神们有什么办法呢

求JAVAdes加密解密和DES算法工具加密解密结果一样的

![图片说明](https://img-ask.csdn.net/upload/201505/29/1432864544_153868.png)如图,在网上找了很多方法,不是结果不一样就是解出来的是乱码

用C#解密JAVA的AES加密字符串

附JAVA的加密方法 public static String encrypt(String s, String token) { try { byte[] key = Hex.toBytes(token); return encryptBase64URLSafe(s, key); } catch (Exception e) { // e.printStackTrace(); return null; } } public static byte[] toBytes(String s) { int len = s.length(); byte[] data = new byte[len / 2]; for (int i = 0; i < len; i += 2) { data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i + 1), 16)); } return data; } private static String encryptBase64URLSafe(String s, byte[] key) { BaseEncoding b64 = BaseEncoding.base64Url().omitPadding(); byte[] encryptedBytes = encryptBytes(s, key); return b64.encode(encryptedBytes); } private static byte[] encryptBytes(String s, byte[] key) { if (key == null) { return null; } // 判断Key是否为16位 if (key.length != 16) { return null; } SecretKeySpec skeySpec = new SecretKeySpec(key, "AES"); try { Cipher cipher = Cipher.getInstance(ALGORITHM); cipher.init(Cipher.ENCRYPT_MODE, skeySpec); byte[] encrypted = cipher.doFinal(s.getBytes("utf-8")); return encrypted; } catch (Exception e) { return null; } } 这个用C#怎么解密啊,大家帮帮忙,我尝试了很多方法都不行 在Convert.FromBase64String(encryptedText);时就报错

RSA OAEP,Golang解密,Java加密

<div class="post-text" itemprop="text"> <p>The Android client encrypt message, the java code </p> <pre><code>Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING"); byte[] publicBytes = Base64.decode(Configs.PUBLIC_KEY.getBytes("UTF-8"),Base64.DEFAULT); X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicBytes); KeyFactory keyFactory = KeyFactory.getInstance("RSA"); PublicKey pubKey = keyFactory.generatePublic(keySpec); cipher.init(Cipher.ENCRYPT_MODE, pubKey); String plaintext = "test"; byte[] encryptedBytes = cipher.doFinal(plaintext.getBytes("UTF-8")); String chipertext = Base64.encodeToString(encryptedBytes,Base64.DEFAULT); Log.d(TAG,"encrypted (chipertext) = " + chipertext); </code></pre> <p>The Golang server decrypt message, the golang code </p> <pre><code>func RsaDecrypt(encryptedString string) (string, error) { base64DecodeBytes, err := base64.StdEncoding.DecodeString(encryptedString) if err != nil { return "", err } privateKeyBlock, _ := pem.Decode([]byte(privateKey)) var pri *rsa.PrivateKey pri, parseErr := x509.ParsePKCS1PrivateKey(privateKeyBlock.Bytes) if parseErr != nil { return "", parseErr } decryptedData, decryptErr := rsa.DecryptOAEP(sha1.New(), rand.Reader, pri, base64DecodeBytes, nil) if decryptErr != nil { return "", decryptErr } return string(decryptedData), nil } </code></pre> <p>and the error in golang : <code>crypto/rsa: decryption error</code> </p> <p>I can't change the code on the server, so how to change the code in Java?</p> <p>Need your help</p> <p>Thx.</p> </div>

Java加密/解密从PHP到Java的数据,IllegalBlockSizeException

<div class="post-text" itemprop="text"> <p>I'm trying to read a base64 encoded and AES 128-bit encrypted string from PHP, but I'm getting IllegalBlockSizeException.</p> <p>PHP encrypt:</p> <pre><code>encrypt("My f awesome test !"); function encrypt($string){ $td = mcrypt_module_open('rijndael-128', '', 'cbc', "1cc251f602cf49f2"); mcrypt_generic_init($td, "f931c96c4a4e7e47", "1cc251f602cf49f2"); $enc = mcrypt_generic($td, $string); mcrypt_generic_deinit($td); mcrypt_module_close($td); return base64_encode($enc); } </code></pre> <p>And the returned value is:</p> <blockquote> <p>McBeY73GQ5fawxIunVKpqUupipeRlt9ntyMRzjbPfTI=</p> </blockquote> <p>Now I want to read it in Java:</p> <pre><code>static public String decrypt(String data) throws Exception { data = new String( Base64.decode(data, Base64.NO_WRAP) ); byte[] keyByte = "f931c96c4a4e7e47".getBytes("UTF-8"); byte[] ivByte = "1cc251f602cf49f2".getBytes("UTF-8"); Key key = new SecretKeySpec(keyByte, "AES"); IvParameterSpec iv = new IvParameterSpec(ivByte); Cipher c = Cipher.getInstance("AES/CBC/NoPadding"); c.init(Cipher.DECRYPT_MODE, key, iv); byte[] bval = c.doFinal( data.getBytes("UTF-8") ); return new String( bval ); } </code></pre> <p>And I'm getting an Exception:</p> <blockquote> <p>javax.crypto.IllegalBlockSizeException: data not block size aligned</p> </blockquote> <p>This might be caused by padding?</p> <p><strong>EDIT</strong></p> <p><img src="https://i.stack.imgur.com/PPK4S.png" alt="enter image description here"></p> </div>

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# 实现 ,有什么好的思路吗?真心求教!

国密算法SM2 js加密 java解密不行,谁帮我看下代码,谢谢!

https://pan.baidu.com/s/1n6Uoyvz3Qo9SjZuCU-hdSg 代码在链接里面,我现在遇到的问题是同样的公钥在js加密后,在java代码中使用对应的私钥无法解密

JAVA视频加密解密,只能在自己的播放器打开,有怎么好的思路吗?

是一个播放器程序,将目标视频改成dll后缀,将视频隐藏,能通过一定方法能让我的播放器识别

河豚GoLang加密和Java解密

<div class="post-text" itemprop="text"> <p>Unable to decrypt the cipher text in Java which is ecrypted in GoLang using Blowfish.</p> <p><strong>Encryption</strong></p> <pre><code>import ( "testing" "golang.org/x/crypto/blowfish" "github.com/andreburgaud/crypt2go/ecb" "github.com/andreburgaud/crypt2go/padding" "fmt" "encoding/base64" ) func TestEncrypt(t *testing.T) { bytes := []byte("cap") key := []byte("1c157d26e2db9a96a556e7614e1fbe36") encByte := encrypt(bytes, key) enc := base64.StdEncoding.EncodeToString(encByte) fmt.Printf("ENC - %s ", enc) } func encrypt(pt, key []byte) []byte { block, err := blowfish.NewCipher(key) if err != nil { panic(err.Error()) } mode := ecb.NewECBEncrypter(block) padder := padding.NewPkcs5Padding() pt, err = padder.Pad(pt) // padd last block of plaintext if block size less than block cipher size if err != nil { panic(err.Error()) } ct := make([]byte, len(pt)) mode.CryptBlocks(ct, pt) return ct } // Output // ENC - AP9atM49v8o= </code></pre> <p><strong>Decryption</strong></p> <pre><code>import lombok.SneakyThrows; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import static java.util.Base64.getDecoder; import static java.util.Base64.getEncoder; public class UserAuthenticationFilter { public static void main(String[] args) throws Exception { String key = "1c157d26e2db9a96a556e7614e1fbe36"; System.out.println(decrypt(getDecoder().decode("AP9atM49v8o="), key)); // encryption and decryption verification // String plainText = "cap"; // String cipher = encrypt(plainText, key); // String decrypted = decrypt(getDecoder().decode(enc), key); // assert decrypted.equals(plainText); } @SneakyThrows public static String encrypt(String plainText, String key) { byte[] myKeyByte = hexToBytes(key); SecretKeySpec skeySpec = new SecretKeySpec(myKeyByte, "Blowfish"); Cipher ecipher = Cipher.getInstance("Blowfish/ECB/PKCS5Padding"); ecipher.init(Cipher.ENCRYPT_MODE, skeySpec); byte[] src = ecipher.doFinal(plainText.getBytes("ISO-8859-1")); return getEncoder().encodeToString(src); } @SneakyThrows public static String decrypt(byte[] cipherContent, String key) { byte[] myKeyByte = hexToBytes(key); SecretKeySpec skeySpec = new SecretKeySpec(myKeyByte, "Blowfish"); Cipher dcipher = Cipher.getInstance("Blowfish/ECB/NoPadding"); dcipher.init(2, skeySpec); byte[] dcontent = dcipher.doFinal(cipherContent); return (new String(dcontent, "ISO-8859-1")).trim(); } private static byte[] hexToBytes(String str) { if (str == null) { return null; } else if (str.length() &lt; 2) { return null; } else { int len = str.length() / 2; byte[] buffer = new byte[len]; for(int i = 0; i &lt; len; ++i) { buffer[i] = (byte)Integer.parseInt(str.substring(i * 2, i * 2 + 2), 16); } return buffer; } } } // Output // BY x³ </code></pre> <p>As per the outputs, encryption in GoLang and decryption in Java doesn't produce the same plain text. Initially, thought the problem might be related to golang's byte (0 to 255) and java's byte (-128 to 127) involved in base64 encoding and decoding. But poking in Java's decryption code, it's handled correctly with <code>value &amp; 255</code>.</p> <p>Decryption of the same cipher text in golang works perfectly. Also encryption and decryption in Java works perfectly. But not the encryption in one and decryption in other.</p> <p>I think the encryption and decryption logic were correct. Only guess might be there's some language specific ??? is missing when the cipher text is ported to other language for decryption.</p> </div>

java 加密算法 知道加密写法 如何求解密写法

登入密码加密 看源代码知道他的加密写法 如何写出解密写法呢 ![图片说明](https://img-ask.csdn.net/upload/201708/30/1504108699_866360.png) ![图片说明](https://img-ask.csdn.net/upload/201708/30/1504108708_133297.png)

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

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

Python可以这样学(第四季:数据分析与科学计算可视化)

Python可以这样学(第四季:数据分析与科学计算可视化)

组成原理课程设计(实现机器数的真值还原等功能)

实现机器数的真值还原(定点小数)、定点小数的单符号位补码加减运算、定点小数的补码乘法运算和浮点数的加减运算。

javaWeb图书馆管理系统源码mysql版本

系统介绍 图书馆管理系统主要的目的是实现图书馆的信息化管理。图书馆的主要业务就是新书的借阅和归还,因此系统最核心的功能便是实现图书的借阅和归还。此外,还需要提供图书的信息查询、读者图书借阅情况的查询等

土豆浏览器

土豆浏览器可以用来看各种搞笑、电影、电视剧视频

Java面试题大全(2020版)

发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全,希望对大家有帮助哈~ 本套Java面试题大全,全的不能再全,哈哈~ 一、Java 基础 1. JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境。 JRE:Java Runtime Environ...

Java8零基础入门视频教程

Java8零基础入门视频教程

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

TTP229触摸代码以及触摸返回值处理

自己总结的ttp229触摸代码,触摸代码以及触摸按键处理

网络工程师小白入门--【思科CCNA、华为HCNA等网络工程师认证】

网络工程师小白入门--【思科CCNA、华为HCNA等网络工程师认证】

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

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

java jdk 8 帮助文档 中文 文档 chm 谷歌翻译

JDK1.8 API 中文谷歌翻译版 java帮助文档 JDK API java 帮助文档 谷歌翻译 JDK1.8 API 中文 谷歌翻译版 java帮助文档 Java最新帮助文档 本帮助文档是使用谷

Ubuntu18.04安装教程

Ubuntu18.04.1安装一、准备工作1.下载Ubuntu18.04.1 LTS2.制作U盘启动盘3.准备 Ubuntu18.04.1 的硬盘空间二、安装Ubuntu18.04.1三、安装后的一些工作1.安装输入法2.更换软件源四、双系统如何卸载Ubuntu18.04.1新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列...

快速排序---(面试碰到过好几次)

原理:    快速排序,说白了就是给基准数据找其正确索引位置的过程.    如下图所示,假设最开始的基准数据为数组第一个元素23,则首先用一个临时变量去存储基准数据,即tmp=23;然后分别从数组的两端扫描数组,设两个指示标志:low指向起始位置,high指向末尾.    首先从后半部分开始,如果扫描到的值大于基准数据就让high减1,如果发现有元素比该基准数据的值小(如上图中18&amp;lt...

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

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

HTML期末大作业

这是我自己做的HTML期末大作业,花了很多时间,稍加修改就可以作为自己的作业了,而且也可以作为学习参考

Python数据挖掘简易入门

Python数据挖掘简易入门

极简JAVA学习营第四期(报名以后加助教微信:eduxy-1)

极简JAVA学习营第四期(报名以后加助教微信:eduxy-1)

C++语言基础视频教程

C++语言基础视频教程

UnityLicence

UnityLicence

软件测试2小时入门

软件测试2小时入门

YOLOv3目标检测实战:训练自己的数据集

YOLOv3目标检测实战:训练自己的数据集

Python数据分析师-实战系列

系列课程主要包括Python数据分析必备工具包,数据分析案例实战,核心算法实战与企业级数据分析与建模解决方案实战,建议大家按照系列课程阶段顺序进行学习。所有数据集均为企业收集的真实数据集,整体风格以实战为导向,通俗讲解Python数据分析核心技巧与实战解决方案。

YOLOv3目标检测实战系列课程

《YOLOv3目标检测实战系列课程》旨在帮助大家掌握YOLOv3目标检测的训练、原理、源码与网络模型改进方法。 本课程的YOLOv3使用原作darknet(c语言编写),在Ubuntu系统上做项目演示。 本系列课程包括三门课: (1)《YOLOv3目标检测实战:训练自己的数据集》 包括:安装darknet、给自己的数据集打标签、整理自己的数据集、修改配置文件、训练自己的数据集、测试训练出的网络模型、性能统计(mAP计算和画出PR曲线)和先验框聚类。 (2)《YOLOv3目标检测:原理与源码解析》讲解YOLOv1、YOLOv2、YOLOv3的原理、程序流程并解析各层的源码。 (3)《YOLOv3目标检测:网络模型改进方法》讲解YOLOv3的改进方法,包括改进1:不显示指定类别目标的方法 (增加功能) ;改进2:合并BN层到卷积层 (加快推理速度) ; 改进3:使用GIoU指标和损失函数 (提高检测精度) ;改进4:tiny YOLOv3 (简化网络模型)并介绍 AlexeyAB/darknet项目。

超详细MySQL安装及基本使用教程

一、下载MySQL 首先,去数据库的官网http://www.mysql.com下载MySQL。 点击进入后的首页如下:  然后点击downloads,community,选择MySQL Community Server。如下图:  滑到下面,找到Recommended Download,然后点击go to download page。如下图:  点击download进入下载页面选择No...

一学即懂的计算机视觉(第一季)

一学即懂的计算机视觉(第一季)

董付国老师Python全栈学习优惠套餐

购买套餐的朋友可以关注微信公众号“Python小屋”,上传付款截图,然后领取董老师任意图书1本。

爬取妹子图片(简单入门)

安装第三方请求库 requests 被网站禁止了访问 原因是我们是Python过来的 重新给一段 可能还是存在用不了,使用网页的 编写代码 上面注意看匹配内容 User-Agent:请求对象 AppleWebKit:请求内核 Chrome浏览器 //请求网页 import requests import re //正则表达式 就是去不规则的网页里面提取有规律的信息 headers = { 'User-Agent':'存放浏览器里面的' } response = requests.get

web网页制作期末大作业

分享思维,改变世界. web网页制作,期末大作业. 所用技术:html css javascript 分享所学所得

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

相关热词 c# 按行txt c#怎么扫条形码 c#打包html c# 实现刷新数据 c# 两个自定义控件重叠 c#浮点类型计算 c#.net 中文乱码 c# 时间排序 c# 必备书籍 c#异步网络通信
立即提问