Tag: encryption

Java到Objective-C RSA的实现

我在Objective-C中实现RSA encryption和解密时遇到了麻烦,我用Java非常简单地编写了它,现在我尝试在objc翻译这个java代码。 这是我的java代码: public static byte[] encryptRSA(byte[] text, PublicKey key) throws Exception { byte[] cipherText = null; // get an RSA cipher object and print the provider Cipher cipher = Cipher.getInstance(“RSA”); // encrypt the plaintext using the public key cipher.init(Cipher.ENCRYPT_MODE, key); cipherText = cipher.doFinal(text); return cipherText; } public static byte[] decryptRSA(byte[] text, PrivateKey key) throws […]

在Python 2.7中复制Java的PBEWithMD5AndDES

如果不是立即显而易见,那么首先我要说的不是加密人。 我的任务是在Python 2.7中复制Java的PBEWithMD5AndDES(使用DES加密的MD5摘要)的行为。 我可以访问Python的加密工具包PyCrypto。 这是我试图复制其行为的Java代码: import java.security.spec.KeySpec; import javax.crypto.spec.PBEKeySpec; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import java.security.spec.AlgorithmParameterSpec; import javax.crypto.spec.PBEParameterSpec; import javax.crypto.Cipher; import javax.xml.bind.DatatypeConverter; public class EncryptInJava { public static void main(String[] args) { String encryptionPassword = “q1w2e3r4t5y6”; byte[] salt = { -128, 64, -32, 16, -8, 4, -2, 1 }; int iterations = 50; try { KeySpec […]

HMC SHA1哈希 – Java生成与C#不同的哈希输出

这是对这个问题的跟进,但我正在尝试将C#代码移植到Java而不是Ruby代码移植到C#,就像相关问题中的情况一样。 我正在尝试validation从Recurly.js api返回的加密签名是否有效。 不幸的是,Recurly没有Java库来协助validation,所以我必须自己实现签名validation。 根据上面的相关问题( this ),以下C#代码可以生成validation从Recurly返回的签名所需的哈希: var privateKey = Configuration.RecurlySection.Current.PrivateKey; var hashedKey = SHA1.Create().ComputeHash(Encoding.UTF8.GetBytes(privateKey)); var hmac = new HMACSHA1(hashedKey); var hash = hmac.ComputeHash(Encoding.ASCII.GetBytes(dataToProtect)); return BitConverter.ToString(hash).Replace(“-“, “”).ToLower(); Recurly在其签名文档页面上提供以下示例数据: 未加密的validation消息 :[1312701386,transactioncreate,[account_code:ABC,amount_in_cents:5000,货币:美元]] 私钥 :0123456789ABCDEF0123456789ABCDEF 结果签名 :0f5630424b32402ec03800e977cd7a8b13dbd153-1312701386 这是我的Java实现: String unencryptedMessage = “[1312701386,transactioncreate,[account_code:ABC,amount_in_cents:5000,currency:USD]]”; String privateKey = “0123456789ABCDEF0123456789ABCDEF”; String encryptedMessage = getHMACSHA1(unencryptedMessage, getSHA1(privateKey)); private static byte[] getSHA1(String source) throws NoSuchAlgorithmException, […]

java中的错误填充exception(RSA解密)

在java.RSA解密RSA Base64编码字符串时,我遇到了一些问题。加密字符串由c#.Net制作。 实际上,我使用java创建了一个公钥和私钥。 然后我将公钥交换到.Net团队。 他们使用RSACryptoServiceProvider类使用公钥加密字符串。 .Net代码: RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(keySize); rsa.FromXmlString(publicKey); ……. ……. byte[] encryptedBytes = rsa.Encrypt(tempBytes, false); Array.Reverse(encryptedBytes); stringBuilder.Append(Convert.ToBase64String(encryptedBytes)); Java解密代码: public static void doDecrypt( BigInteger modules, BigInteger d , String encrypted ) { try { byte[] decodedBytes = Base64.decodeBase64( encrypted ); KeyFactory factory = KeyFactory.getInstance(“RSA”); Cipher cipher = Cipher.getInstance(“RSA”); RSAPrivateKeySpec privSpec = new […]

RSA和Base64编码太多字节

我正在尝试使用Base64编码实现RSA加密。 顺序是: String -> RSA encrypt -> Base64 encoder -> network -> Base64 decoder* -> RSA decrypt > String 我将通过网络发送base64编码的字符串,并在所有Base64为文本之后将其作为字符串读取,对吧? 现在有些原因当我解码Base64时,我得到的字节数比我最初发送的字节数多。 在发送方,我的RSA字符串是512字节。 在Base64编码后,其长度为1248(每次都会变化)。 在接收器端,我的Base64编码接收字符串仍然是1248长,但当我解码它然后我突然得到936字节。 然后我无法使用RSA解密它,因为ciper.doFinal方法挂起。 我假设这有一些东西与字节到unicode字符串转换但我无法弄清楚这发生在哪一步以及我如何解决它。 发件人边码: cipher = Cipher.getInstance(“RSA/NONE/OAEPWithSHA256AndMGF1Padding”); cipher.init(Cipher.ENCRYPT_MODE, getPublicKey()); byte[] base64byes = loginMessage.getBytes(); byte[] cipherData = cipher.doFinal(base64byes); System.out.println(“RSA: ” + cipherData.length); //is 512 long //4. Send to scheduler Base64PrintWriter base64encoder = new […]

如何使RSACryptoServiceProvider无需填充(nopadding)?

我需要使C#应用程序与Java应用程序兼容。 Java应用程序使用Cipher.getInstance(“RSA/ECB/nopadding”); 初始化程序,使密码ECB和无填充。 但是,在C#中,您有2个填充选项:OAEP填充或PKCS#1 v1.5填充。 我需要一个无填充版本,否则我肯定会陷入我的项目中。 我认为没有办法让C#.NET RSACryptoServiceProvider使用无填充方案。 但是,是否存在允许此精度的RSA自定义类或库? PS:默认情况下是C#.NET的RSACryptoServiceProvider ECB吗? 我找不到关于此的文档。

C#到Java TripleDES,结果不同

我正在尝试将此C#加密算法转换为Java; 但是,我一直在检索略有不同的加密结果(尚未尝试过解密)。 指出我无法更改C#代码也可能很重要。 但是当我在字符串“test”中调用C#中的加密函数时,它将返回nmj8MjjO52y928Syqf0J+g==但是在Java中它将返回C6xyQjJCqVo= C# private static String key = “012345678901234567890123”; public static string encrypt(String stringToEncrypt) { TripleDES des = CreateDES(key); ICryptoTransform ct = des.CreateEncryptor(); byte[] input = Encoding.Unicode.GetBytes(stringToEncrypt); byte[] output = ct.TransformFinalBlock(input, 0, input.Length); //return output; return Convert.ToBase64String(output); } public static String decrypt(string encryptedString) { byte[] input = Convert.FromBase64String(encryptedString); TripleDES des = CreateDES(key); ICryptoTransform […]

如何解密签名的pgp加密文件?

如何使用BouncyCastle Java API解密和validation使用PGP加密的文件?

HSM错误| 私钥必须是RSAPrivate(Crt)密钥的实例或具有PKCS#8

从HSM检索私钥时解密数据时收到错误。 我在java.security中添加了sunpkcs11提供程序。 因此,不要通过代码添加提供程序。 文本已成功加密。 但是,在解密加密文本时,我在下面的行中得到以下错误: cipher.init(Cipher.DECRYPT_MODE, privateKey); 我在这里失踪的是什么? 错误: Caused by: java.security.InvalidKeyException: Private key must be instance of RSAPrivate(Crt)Key or have PKCS#8 encoding at sun.security.pkcs11.P11RSAKeyFactory.implTranslatePrivateKey(P11RSAKeyFactory.java:101) [sunpkcs11.jar:1.7.0_85] at sun.security.pkcs11.P11KeyFactory.engineTranslateKey(P11KeyFactory.java:132) [sunpkcs11.jar:1.7.0_85] at sun.security.pkcs11.P11KeyFactory.convertKey(P11KeyFactory.java:65) [sunpkcs11.jar:1.7.0_85] at sun.security.pkcs11.P11RSACipher.implInit(P11RSACipher.java:199) [sunpkcs11.jar:1.7.0_85] at sun.security.pkcs11.P11RSACipher.engineInit(P11RSACipher.java:168) [sunpkcs11.jar:1.7.0_85] at javax.crypto.Cipher.init(Cipher.java:1068) [jce.jar:1.7.0_85] at javax.crypto.Cipher.init(Cipher.java:1012) [jce.jar:1.7.0_85]enter code here 以下是代码: import java.io.ByteArrayOutputStream; import java.security.KeyStore; import java.security.PrivateKey; import java.security.PublicKey; […]

带有TLSv1.2的Java 7连接到LDAPS握手失败

目前我使用的是Java 7,但我无法连接到LDAPS。 我尝试使用下面的代码,但我仍然无法连接: SSLContext ctx = SSLContext.getInstance(“TLSv1.2”); ctx.init(null, null, null); SSLContext.setDefault(ctx); 以下是我从程序中得到的错误: 2018-04-10 15:21:23,446 INFO [stdout](EJB默认值 – 1)EJB默认值 – 1,WRITE:TLSv1.2握手,长度= 221 2018-04-10 15:21:23,446 INFO [stdout](EJB默认值 – 1)EJB默认值 – 1,READ:TLSv1.2 Alert,length = 2 2018-04-10 15:21:23,446 INFO [stdout](EJB默认值 – 1)EJB默认值 – 1,RECV TLSv1 ALERT:致命,handshake_failure 2018-04-10 15:21:23,446 INFO [stdout](EJB默认值 – 1)EJB默认值 – 1,名为closeSocket() 2018-04-10 15:21:23,446 INFO [stdout](EJB默认值 – […]