Tag: 加密

Java中的OpenSSL EVP_BytesToKey问题

我正在对一个API进行逆向工程,我发现它使用AES-256-CBC进行加密。 我还发现它使用EVP_BytesToKey来加密HTTP请求。 在我发现这个之后我测试了它但是我遇到了一些问题(可能是因为我没经验)。 我不知道在哪里放密码 这是需要被解密的内容: FP2xttTh/wm5Kr45Vh/PEvsdxgfL3NgxxMMk9hTkPfJd7vSJXTlhjiZlQajnBcMAVknANpv5FNCMRD+epDSOA2epKOzstSmhC0il2TlwgKqaT+97zomCMUCIfdaJYnLz5gBth1MIpxO30bx9zPg8cbOJcLnMmCo3vtSDCalgjHICf5FevI7DgrWnWC1U4wab0rx/rWhGFJ0sOW1ImDi9DkCy+guQZIrojbZxRlvGzv1mU/avP5hbKgWIheJpYQvvM12RyCNuVxjHK/oZ1mCQLVjvpED291lxsGTNHPUrc2NI7LCj/xOztjgsukpBP9K1nsUIgEyfVFUfTf5sh4QPccZnJ1bzKqPD 告诉我钥匙和解密方式的人也给了我这个 REMOVED

AES解密与充气城堡

我试图调整http://www.java2s.com/Code/Java/Security/Basicsymmetricencryptionexample.htm中的示例代码,必须使用3个参数调用,模式(加密或解密),IV和密钥。 它还可以读取和写入特定文件。 到目前为止,我忽略了给定的IV和键,直到我完成其余的运行。 我的代码成功地从文件加密明文,并将密文写入文件,但解密不起作用。 似乎解密模式读取的字节数多于加密写入的字节数,并且我得到块对齐错误。 我确定解密部分的某处存在一些基本错误,但我不知道它是什么。 如果有人能够识别问题或者可以看到任何可能导致它的明显错误,请告诉我。 错误发生在 try{ ctLength += cipher.doFinal(cipherText, ctLength);}catch{IllegalBlockSizeException e) 代码行: import java.io.BufferedWriter; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.BufferedReader; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.Writer; import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.NoSuchProviderException; import java.security.Security; import java.util.Arrays; import javax.crypto.BadPaddingException; […]

EncryptionException:javax.crypto.IllegalBlockSizeException:使用填充密码解密时,输入长度必须是8的倍数

我从2006年inheritance了一个旧的java项目(原来的开发已经很久了,我以前从未编写过Java),我收到了这个错误: EncryptionException:javax.crypto.IllegalBlockSizeException:使用填充密码解密时,输入长度必须是8的倍数 它引用的代码如下所示: public String decrypt( String encryptedString ) throws EncryptionException { if ( encryptedString == null || encryptedString.trim().length() <= 0 ) throw new IllegalArgumentException( "encrypted string was null or empty" ); try { SecretKey key = keyFactory.generateSecret( keySpec ); cipher.init( Cipher.DECRYPT_MODE, key ); BASE64Decoder base64decoder = new BASE64Decoder(); byte[] cleartext = base64decoder.decodeBuffer( encryptedString ); […]

我可以使用标准Java Cipher API使用BouncyCastle的Tweakable Block Ciphers吗?

BouncyCastle提供了Threefish的实现,可以将调整作为参数: ThreeFishEngine engine = new ThreeFishEngine(256); engine.init(true, new TweakableBlockCipherParams(…)); 但是, TweakableBlockCipherParams与Java默认Cipher实例使用的AlgorithmParameter类型不兼容。 有没有办法通过调整来初始化这个密码? Cipher cipher = Cipher.getInstance(“Threefish-256/CBC/NoPadding”); cipher.init(???);

错误:RSA密钥长度必须至少为512位?

我正在尝试创建一个使用模数和指数的应用程序来生成RSA的公钥。 但是,存在模数和指数都可能是hex值的问题。 这是我生成密钥的代码,标有 – <—的行是发生错误的地方。 RSAPublicKeySpec spec = new RSAPublicKeySpec(new BigInteger(1,hexToByte(rsaJSON.publickey_exp)),new BigInteger(1,hexToByte(rsaJSON.publickey_mod))); KeyFactory factory = KeyFactory.getInstance(“RSA”); PublicKey pub = factory.generatePublic(spec); > 4)) .append(HEXES.charAt((b & 0x0F))); } return hex.toString(); } public static byte[] hexToByte( String hexString){ int len = hexString.length(); byte[] ba = new byte[len / 2]; for (int i = 0; i < len; i […]

DSA问题 – 使用.NET创建DSA公钥/私钥,使用Java公钥(android)

这是设置: 我用.NET创建公钥/私钥对,我想签一个字符串。 我取一个随机字符串,从中获取一个byte [],签名,然后在java应用程序中获取签名。 我想在java中validation它((!)我在谈论Android的java)。 将公钥带到Java环境的过程:当我创建公钥时,我将字节数组用于公钥(P,Q,G,Y),并使用这些值在Java中创建PublicKey。 .NET中的P,Q,G,Y是byte [],我将它们转换为sbyte []并在Java中使用这些sbyte [],创建大整数: byte [] byteP = new byte [] {-34,…… -117}; … BigInteger p = new BigInteger(1,byteP); … 新的DSAPublicKeySpec(y,p,q,g); 为了测试这个过程,我从C#中获取签名byte [],将其转换为sbyte [],然后在Java中使用它。 问题是,我以后无法validation签名字符串。 我有 java.security.SignatureException:签名字节具有无效编码 任何想法赞赏! (比如,完成整个事情的更好,完全不同的方式;))

在Java中复制Oracle DES加密

我最近问了一个关于Oracle加密的问题。 在为自己寻找解决方案的过程中,我决定将加密(好的,混淆)移到应用程序端以执行某些任务。 我的问题是数据库已经以某种方式加密数据,我需要Java代码来复制该function,因此一个系统加密的文本可以被另一个系统解密,反之亦然。 我希望加密与数据库已经在进行的操作兼容,但是找不到准确描述Oracle正在做什么的文档。 我如何用Java复制它? dbms_obfuscation_toolkit.DESEncrypt( input_string => v_string, key_string => key_string, encrypted_string => encrypted_string ); RETURN UTL_RAW.CAST_TO_RAW(encrypted_string); 无论我尝试什么,似乎Java DES加密与Oracle不同。

你能弄清楚为什么这个程序会触发IllegalStateException吗?

〜/ Cipher / nsdl / crypto中的所有文件都可以在这里找到用gcj编译的java文件,参见compile.sh nmint@nqmk-mint ~/Cipher/nsdl/crypto $ echo test | ./cryptTest encrypt deadbeefdeadbeefdeadbeefdeadbeef deadbeef Blowfish CBC > test null Exception in thread “main” java.lang.IllegalStateException: cipher is not for encrypting or decrypting at javax.crypto.Cipher.update(libgcj.so.81) at javax.crypto.CipherOutputStream.write(libgcj.so.81) at nsdl.crypto.BlockCrypt.encrypt(cryptTest) at nsdl.crypto.cryptTest.main(cryptTest) BlockCrypt.java: package nsdl.crypto; import java.io.*; import java.security.spec.*; import javax.crypto.*; import javax.crypto.spec.*; public class BlockCrypt […]

将字符串转换为AES的128位密钥

我想输入我自己的String变量,然后将其转换为AES算法的加密/解密密钥。 我尝试了许多已知的方法,如UTF-8,base64,一些方法做转换字节串,反之亦然等等。 虽然所有这些都能正常工作,但是其中一些不能正常工作,所有这些都会以字节为单位转换字符串,但我想要的是输入类似“helloWorld”的内容并获取AES的128位密钥。 我使用它的任何东西都是“无效的密钥长度”,因为字节不准确。 我需要做什么才能获得正确的字节? 另外我想澄清一下,我想要String而不是char数组,因为我想在以后的程序中将它作为一个函数,以便用户可以随意更改密钥。 更新:我编辑了这个例子,这个我到目前为止,仍然抛出有关参数和密钥长度的exception public class SHAHashingExample { private static byte[] keyValue; public static void main(String[] args)throws Exception { String password = “123456”; MessageDigest md = MessageDigest.getInstance(“SHA-256”); md.update(password.getBytes()); byte byteData[] = md.digest(); keyValue = md.digest(); //convert the byte to hex format method 1 StringBuffer sb = new StringBuffer(); for (int i = […]

为什么keyStore.aliases()对于pkcs12是空的

我正在尝试使用以下代码从.p12文件加载PrivateKey: Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); java.security.KeyStore keyStore = KeyStore.getInstance(“PKCS12”, “BC”); keyStore.load(new FileInputStream(new File(“my_domain_com.p12”)), password); keyStore.aliases().hasMoreElements(); //this is false java.security.PrivateKey privateKey = (PrivateKey) keyStore.getKey(“SomeAlias”, password); 我试图找出没有别名的原因。 但是我无法找到。 空的别名可能是什么原因? 我想获取私钥,并使用此密钥生成一些文本。 还有其他的apporach吗? 我也有.cer文件,但我不确定我应该一起使用。