Tag: base64

C#vs Java HmacSHA1然后base64

我有一个java代码示例,用于使用HMAC-SHA1算法(RFC 2104)计算摘要,然后使用Base64编码(RFC 2045)进行编码。 这是java代码 public static String buildDigest(String key, String idString) throws SignatureException { try { String algorithm = “HmacSHA1”; Charset charset = Charset.forName(“utf-8”); SecretKeySpec signingKey = new SecretKeySpec(key.getBytes(), algorithm); Mac mac = Mac.getInstance(algorithm); mac.init(signingKey); return new String(Base64.encodeBase64(mac.doFinal(idString.getBytes(charset))), charset); } catch (Exception e) { throw new SignatureException(“Failed to generate HMAC : ” + e.getMessage()); } […]

回车问题从Java解码Base64并发送到浏览器

我有一个servlet,已resize并将图像编码为base64。 我像这样编码 BufferedImage newBuf = .. a bufferedImage… ByteArrayOutputStream baos = new ByteArrayOutputStream(); ImageIO.write(bufferedImage, sImgFormat, baos); baos.flush(); imageInBytes = baos.toByteArray(); 然后我将其编码到base64中,像这样发送到浏览器 sun.misc.BASE64Encoder encoder = new BASE64Encoder(); String sEncImage = “data:image/jpg;base64,” + encoder.encodeBuffer(imageInBytes); 浏览器将接收编码,除了在字符串中一致嵌入的回车符(“\ n”)之外,它会起作用,这会破坏图像。 当我删除回车时,图像很好。 有没有一种方法来生成没有回车符的编码。 或者我必须在发回之前自行过滤掉它? (我正在使用J2SE 1.4.2并需要继续这样做)

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 ); […]

如何在swift中将字符串(在Java中使用加密MessageDigest)编码为Base64字符串?

在Java中,我使用了这个: public void encryptData() { String data = “Hello World”; MessageDigest md = null; try { md = MessageDigest.getInstance(“MD5”); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } if (md == null) { return; } md.update(data.getBytes()); String dataEncoded = Base64.encodeToString(md.digest(), 11); return dataEncoded; //print: sQqNsWTgdUEFt6mb5y4_5Q } 我如何在Swift中获得相同的结果? 更新: func test() -> Void { var data: String = […]

JBoss 5截断base64 = base64 cookie字符串

从JBoss 4升级到JBoss 5之后,我注意到了最烦人的回归。 它截断了base64 cookie值的尾随等号(’=’)。 我花了很多时间才明白问题不是我的代码而是JBoss’,我用Google搜索并发现它是一个已知问题 。 建议的解决方法是计算字符串长度并用尾随等号填充它(长度为4的多重性)。 由于我们的应用程序可以在多个应用程序服务器(例如WebLogic,WebSpehere)上运行,因此我非常不愿意添加特定于此版本JBoss的这段代码。 有没有人遇到过这个? 你能建议一个更聪明的解决方法吗? 编辑:感谢@skaffman我理解我的问题,我不应该首先使用base64 for cookie string。 base 64上有一个名为base64 url的变种,应该用于这样的字符串(cookies,urls ……)。 例如,Apache编解码器库在其基本64实现中支持此变体。

如何使用密码解码字符串?

我有一个密码需要通过网络传输。 因此,对于安全方面,我已经从发送端编码并在接收端进行解码。 但我的朋友仍然可以在网络上破解密码,因为他知道我如何编码密码字符串。 这是我的代码 package org; import java.util.Base64; public class EncodingString { public static void main(String[] args){ String str = “I’m Encoding then decoding”; byte[] bytesEncoded = Base64.getEncoder().encode(str.getBytes()); System.out.println(bytesEncoded); String EncodedPassword = new String(bytesEncoded); System.out.println(“ecncoded value is ” + EncodedPassword); byte[] valueDecoded= Base64.getDecoder().decode(bytesEncoded); System.out.println(valueDecoded); String DecodedPassword = new String(valueDecoded); System.out.println(“Decoded value is ” + DecodedPassword); […]

从java中的xml解码大型base64:OutOfMemory

我需要将xml文件的base64编码元素写入单独的文件中。 问题:文件很容易达到100 MB的大小。 我尝试的每个解决方案都以“java.lang.OutOfMemoryError:Java堆空间”结束。 问题不是一般读取xml或解码过程,而是读取base64块的大小。 我使用jdom,dom4j和XMLStreamReader来访问xml文件。 但是,只要我想访问相应元素的base64内容,我就会得到上述错误。 我也尝试使用saxon的base64Binary-to-octets函数的xslt,但当然也有相同的结果。 有没有办法将这个base64编码的部分流式传输到一个文件而不需要将整个块放在一个单件中? 谢谢你的提示, 安德烈亚斯

使用Base64的AES会为同一纯文本生成不同的加密结果吗?

这是一个名为test()的示例虚拟代码,我运行了100K次,我得到了相同纯文本的不同加密消息(显然,我得到的解密是原始纯文本)。 我想这背后的原因是避免频率; 但是为什么一个解密会有多少加密呢? 不应该是一比一吗? public static void test() { String plainMessage = “I’m gonna bid 100 USD on this project”; String password = “A99922000001000004581F0F0CCD0000”; Set set = new HashSet(); for (int x=0; x”+set.size()); //just to make sure they are all unique } 加密 public static String encryptMessage(final String plainMessage, final String symKeyHex) { final byte[] […]

RSA加密Android和Java环境之间的差异

首先,为我即将发布的代码量道歉。 我正在尝试使用我的Java应用程序中的RSA公钥来加密Android应用程序中的消息,然后将密文发送回Java环境进行解密,但在尝试解密时,我总是会收到此错误: javax.crypto.BadPaddingException: Decryption error at sun.security.rsa.RSAPadding.unpadV15(RSAPadding.java:380) at sun.security.rsa.RSAPadding.unpad(RSAPadding.java:291) at com.sun.crypto.provider.RSACipher.doFinal(RSACipher.java:356) at com.sun.crypto.provider.RSACipher.engineDoFinal(RSACipher.java:382) at javax.crypto.Cipher.doFinal(Cipher.java:2087) … 密文确实包含正确的字节数(512),因此看到“填充错误”exception会让人感到困惑。 SO上的其他类似post建议使用“RSA / ECB / PKCS1Padding”作为算法,但这不起作用。 令人讨厌的是,Android环境中的加密和解密(使用Base64.URL_SAFE作为’base64Type’)工作正常,我似乎无法使用通过Java生成的公钥进行初始加密。 我已经将最小的代码提取到示例中,如下所示: Android代码 private void exampleMethod(){ String messageString = “Why does this not work in Android?”; String serverPubKey = “MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoApIBIna77xq4j+M2RmyIhsB++41NHcY4KIPfX4VP4ADnkO+7ejbs4le/twrPtYGESVPF9czSMB5bzmTBZtq0jC8oT/6wiDIBlSuzo4fBrGociBIuaOjyG/j3ZhpcWpWPXuzER+ehuQ+8hZkMuJdK9IodqPR+5jmCef4rXoKObwS02LYQ1co5dEmtZVQRmmeYaVnWibd/s1d4KKGvSzXap3YBTf8peH5UGIQrLOTqvX0bo34xFxmj5U0H3xudnnwuVAlQlj9KiHPPABuwNtm1buRKJb5HZhSCveyT/2YAOmQqGrVN/nALtlZyTDZNs//Vp1zb9exSuG0t5xFc+pn4QIDAQAB”; String encryptedMessageString = getUrlEncodedCipherText(messageString, serverPubKey, Base64.NO_WRAP); /** * CipherText is ALWAYS the same […]

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 […]