Tag: 加密

如何使用java解码用openssl aes-128-cbc编码的字符串?

我正在使用openssl使用以下命令对字符串进行编码: openssl enc -aes-128-cbc -a -salt -pass pass:mypassword <<< "stackoverflow" 结果给我一个编码字符串: U2FsdGVkX187CGv6DbEpqh/L6XRKON7uBGluIU0nT3w= 到目前为止,我只需要使用openssl对其进行解码,因此以下命令将返回先前编码的字符串: openssl enc -aes-128-cbc -a -salt -pass pass:mypassword -d <<< "U2FsdGVkX187CGv6DbEpqh/L6XRKON7uBGluIU0nT3w=" 结果: stackoverflow 现在,我需要解码java应用程序中的编码字符串。 我的问题是: 有人能为我提供一个简单的java类来解码用以前给定的openssl命令编码的字符串吗? 非常感谢。

JSchException:算法协商失败

我试图通过ssh与JSch(0.1.44-1)连接到远程sftp服务器但在“session.connect();”期间 我得到这个例外: com.jcraft.jsch.JSchException: Algorithm negotiation fail at com.jcraft.jsch.Session.receive_kexinit(Session.java:529) at com.jcraft.jsch.Session.connect(Session.java:291) at com.jcraft.jsch.Session.connect(Session.java:154) … 来自JSch的日志: INFO: Connecting to xx.xx.xx.xxport 22 INFO: Connection established INFO: Remote version string: SSH-2.0-WeOnlyDo 2.0.6 INFO: Local version string: SSH-2.0-JSCH-0.1.44 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 […]

比播种SecureRandom更好的创建AES密钥的方法

我需要将加密数据从Java客户端发送到C#服务器。 现在我正在学习如何使用AES (要求)加密数据。 继这个接受的答案用AES加密/解密我正在做以下事情: byte[] keyStart = “qweroiwejrwoejlsifeoisrn”.getBytes(); // Random character string byte[] toEncrypt = myMessageString.getBytes(); keyGen = KeyGenerator.getInstance(“AES”); sr = SecureRandom.getInstance(“SHA1PRNG”); sr.setSeed(keyStart); keyGen.init(128, sr); SecretKey secretKey = keyGen.generateKey(); byte[] secretKeyByte = secretKey.getEncoded(); SecretKeySpec skeySpec = new SecretKeySpec(secretKeyByte, “AES”); Cipher cipher = Cipher.getInstance(“AES”); cipher.init(Cipher.ENCRYPT_MODE, skeySpec); cipher.doFinal(toEncrypt); 由于该算法使用keyStart使用SecureRandom ,我不确定这是否可以在C#解码,甚至在没有SecureRandom情况下在其他Java程序中解码。 这个加密/解密是否只需要知道keyStart的值,或者因为我使用的是SecureRandom我还需要传递其他内容才能解密? 还有,有更好的方法可以做到这一点还是这个好吗?

RSA块的数据太多失败。 什么是PKCS#7?

谈论javax.crypto.Cipher 我试图使用Cipher.getInstance(“RSA/None/NoPadding”, “BC”)加密数据Cipher.getInstance(“RSA/None/NoPadding”, “BC”)但我得到了exception: ArrayIndexOutOfBoundsException:RSA块的数据太多 看起来是与“NoPadding”有关的东西,因此,阅读填充,看起来像CBC是这里使用的最佳方法。 我在google上发现了一些关于“RSA / CBC / PKCS#7”的内容,这是什么“PKCS#7”? 为什么它没有列在太阳的标准算法名称上 ? 更新: 我想知道,如果是填充问题,为什么这个例子运行得很好? import java.math.BigInteger; import java.security.KeyFactory; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; import java.security.spec.RSAPrivateKeySpec; import java.security.spec.RSAPublicKeySpec; import javax.crypto.Cipher; /** * Basic RSA example. */ public class BaseRSAExample { public static void main( String[] args) throws Exception { byte[] input = new byte[] { (byte)0xbe, […]

将openSSH rsa密钥转换为javax.crypto.Cipher兼容格式

有没有办法以编程方式将Jsch生成的SSH RSA密钥转换为javax.crypto.Cipher格式可以用于加密? 我大多看到类似的答案: openssl pkcs8 -topk8 -inform PEM -outform DER -in private_key_file -nocrypt > pkcs8_key 但我没有访问openSSL或shell命令。 顺便说一句:我只使用JDK6。 感谢@erickson的帮助,我可以将公钥从RFC4716转换为Java公钥,使用指数和模数作为BigInteger类型传递给具有KeyFactory 。 他的解决方案如下。 现在我正在尝试转换私钥。 这是使用writePrivateKey(str filename)生成的writePrivateKey(str filename)示例: —–BEGIN RSA PRIVATE KEY—– MIICXAIBAAKBgQC0ouLgTjmKjHU6UjNSL8HyTIdFM1UdVpgU81paWKreN8L36YoT goZQHeyyUCCHmq3r3cKaySyu93mHBY0l76qSAIRZgE1IAFkBhNWBdlJ9UYA9HXm/ MqTQHbpqz0EYGE9TsFHS8dn1/utsJxKSWZ4xPNYjfS4Ps6G84iRwfdrIbQIDAQAB AoGAKv3xnY1AqLcRV5Yk3NS9Blwsfc3f3iG0BJh+0q3zzPvcjYCp+kbAjOTyZuYn N98asd6P6KMk3WfNJtOtanAGWl46bmtzNsQtSr5rVQEgs2w8i2yJcwVAYf2Td4qX m3dH+roJA/CEFRSDat4sUfjOVmsYQXIBa0W2XTpp+7T1U4ECQQD1wSR6iTz7Bja0 MPcizDbRTRQHALBf7E8j8YOLpN/IGSox9pT+ktjsI2vMaD+b3SM4s0FD8quBlppE o5FAguHxAkEAvCrCK7eZU3H+Ul1iw9Kd3WPHjDvQcdT5rEL+NSYEZyHgU7ipXEih UHvK47Bkte/PVIu3jBFBnMujA0XiT0gSPQJBAI3+8j/nChgU6AjHfhRaIJZgzeCZ 8k8KcFPZWWOXeUHZ4HqL+lz5pmMSuFecKJy7cn1xfZVwIs62oR5l0CiRN1ECQCui CqaSi3ZjH6M/znA0PbEhuxsUn7BVv5OncUUnzKuRmnAviO5CVU3Rdum3dJMPydcE Ewri0YEnY2SV5vWVc80CQH43uBbshz7ju3DdVykHFrRElQB+f0YMK3Ad7eu+us0w dLrOOoXP0T60B/bMTo8rdMa6XU/0w/w8FsOqoxNY23U= —–END RSA PRIVATE KEY—– 使用openssl asn1parse -in privateJsch.key -out privateJsch.der yeild: $ openssl asn1parse […]

使用Java中的PBKDF2进行密码validation

我正在用Java做基于密码的文件加密; 我使用AES作为底层加密算法,而PBKDF2WithHmacSHA1使用以下代码从盐和密码组合中导出密钥(我从本网站的另一张慷慨的海报中获得)。 SecretKeyFactory f = SecretKeyFactory.getInstance(“PBKDF2WithHmacSHA1″); KeySpec ks = new PBEKeySpec(password,salt,1024,128); SecretKey s = f.generateSecret(ks); Key k = new SecretKeySpec(s.getEncoded(),”AES”); 我共享盐,用户在每端输入密码,加密和解密工作正常:-)我的问题是,我希望能够validation用户输入的密码是否正确才能开始(可能很长)解密过程。 我知道PBKD规范包含一个可选的2字节validation值,但我不确定如何使用上述方法生成此值。 Java是否为此提供支持,或者不支持哪种安全替代方案? 谢谢你的时间。

iText / BouncyCastle ClassNotFound org.bouncycastle.asn1.DEREncodable and org.bouncycastle.tsp.TimeStampTokenInfo

我正在尝试使用iText Java。 当您运行示例“ 如何签名 ”时,会发生以下错误: Caused by: java.lang.ClassNotFoundException: org.bouncycastle.tsp.TimeStampTokenInfo 根据“iText入门 – 如何使用iText签署PDF” ,我必须使用BouncyCastle 。 我从BouncyCastle下载页面下载了文件:bcprov-jdk15on-147.jar 。 并添加到项目中:Java Build Path / Libraries / Add External JARs … 我添加了以下行: Security.addProvider(new BouncyCastleProvider()); 运行该示例时,会发生相同的错误。 所以我下载了另一个文件:bcpkix-jdk15on-147.jar,标题为“PKIX / CMS / EAC / PKCS / OCSP / TSP / OPENSSL” 并添加到项目中:Java Build Path / Libraries / Add External JARs … 现在我有两个jar子。 运行该示例时,会发生以下错误: […]

如何在Java中安全地存储加密密钥?

我有一个java属性对象,其中包含Web服务的身份validation信息。 我需要加密这些数据,但我不知道在哪里需要存储加密密钥才能保持安全。 有关加密此数据并以安全方式检索数据的最佳做法是什么? 使用密钥库有什么好处吗? ws_user=username ws_password=password ws_url=https://www.whatever.com/myservice

如何将String转换为SecretKey

我想将String转换为secretKey public void generateCode(String keyStr){ KeyGenerator kgen = KeyGenerator.getInstance(“AES”); kgen.init(128); // 192 and 256 bits may not be available // Generate the secret key specs. secretKey skey=keyStr; //How can I make the casting here //SecretKey skey = kgen.generateKey(); byte[] raw = skey.getEncoded(); } 我尝试使用BASE64Decoder而不是secretKey,但我面临一个问题,即我无法指定密钥长度。 编辑:我想从另一个地方调用此函数 static public String encrypt(String message , String key , int […]

使用AES和Base64编码进行加密和解密

我有以下加密数据的程序。 import java.security.Key; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.binary.Base64; public class Test { private static final String ALGORITHM = “AES”; private static final byte[] keyValue = “ADBSJHJS12547896”.getBytes(); public static void main(String args[]) throws Exception { String encriptValue = encrypt(“dude5”); decrypt(encriptValue); } /** * @param args * @throws Exception */ public static String encrypt(String valueToEnc) throws […]