首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用RSA的加密套接字连接java (IllegalArgumentException:非法的base64字符10)

RSA加密套接字连接是一种使用RSA算法进行加密和解密的安全通信方式。在Java中,使用RSA加密套接字连接时,可能会遇到"IllegalArgumentException:非法的base64字符10"的异常。

这个异常通常是由于密钥的base64编码格式不正确导致的。在使用RSA加密套接字连接时,需要确保密钥的正确性和完整性。以下是解决这个异常的步骤:

  1. 生成RSA密钥对:使用Java的密钥生成器(KeyPairGenerator)生成RSA密钥对,包括公钥和私钥。可以使用以下代码生成密钥对:
代码语言:txt
复制
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
PublicKey publicKey = keyPair.getPublic();
PrivateKey privateKey = keyPair.getPrivate();
  1. 导出密钥:将生成的公钥和私钥导出为base64编码的字符串,以便在加密套接字连接中使用。可以使用以下代码导出密钥:
代码语言:txt
复制
String publicKeyBase64 = Base64.getEncoder().encodeToString(publicKey.getEncoded());
String privateKeyBase64 = Base64.getEncoder().encodeToString(privateKey.getEncoded());
  1. 使用导出的密钥进行加密套接字连接:在加密套接字连接中使用导出的公钥和私钥进行加密和解密操作。可以使用以下代码示例:
代码语言:txt
复制
// 客户端
SSLSocketFactory sslSocketFactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLSocket sslSocket = (SSLSocket) sslSocketFactory.createSocket("服务器地址", 443);
sslSocket.setEnabledCipherSuites(sslSocket.getSupportedCipherSuites());
sslSocket.startHandshake();

OutputStream outputStream = sslSocket.getOutputStream();
InputStream inputStream = sslSocket.getInputStream();

// 使用公钥加密数据
Cipher encryptCipher = Cipher.getInstance("RSA");
encryptCipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] encryptedData = encryptCipher.doFinal("要加密的数据".getBytes());
outputStream.write(encryptedData);
outputStream.flush();

// 使用私钥解密数据
Cipher decryptCipher = Cipher.getInstance("RSA");
decryptCipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] buffer = new byte[1024];
int length = inputStream.read(buffer);
byte[] decryptedData = decryptCipher.doFinal(buffer, 0, length);
String decryptedMessage = new String(decryptedData);
System.out.println("解密后的数据:" + decryptedMessage);

// 服务器端
SSLServerSocketFactory sslServerSocketFactory = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
SSLServerSocket sslServerSocket = (SSLServerSocket) sslServerSocketFactory.createServerSocket(443);
SSLSocket sslSocket = (SSLSocket) sslServerSocket.accept();
sslSocket.setEnabledCipherSuites(sslSocket.getSupportedCipherSuites());
sslSocket.startHandshake();

OutputStream outputStream = sslSocket.getOutputStream();
InputStream inputStream = sslSocket.getInputStream();

// 使用私钥解密数据
Cipher decryptCipher = Cipher.getInstance("RSA");
decryptCipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] buffer = new byte[1024];
int length = inputStream.read(buffer);
byte[] decryptedData = decryptCipher.doFinal(buffer, 0, length);
String decryptedMessage = new String(decryptedData);
System.out.println("解密后的数据:" + decryptedMessage);

// 使用公钥加密数据
Cipher encryptCipher = Cipher.getInstance("RSA");
encryptCipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] encryptedData = encryptCipher.doFinal("要加密的数据".getBytes());
outputStream.write(encryptedData);
outputStream.flush();

在以上代码示例中,我们使用了Java的加密库(javax.crypto)和安全套接字库(javax.net.ssl)来实现RSA加密套接字连接。注意,这只是一个简单的示例,实际使用中还需要考虑更多的安全性和错误处理。

推荐的腾讯云相关产品:腾讯云SSL证书、腾讯云云服务器(CVM)、腾讯云密钥管理系统(KMS)等。您可以通过腾讯云官方网站获取更详细的产品介绍和文档。

参考链接:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java实现RSA加密解密、数字签名及验签

RSA公钥加密算法是1977年由罗纳德-李维斯特(Ron Rivest)、阿迪-萨莫尔(Adi Shamir)和伦纳德-阿德曼(Leonard Adleman)一起提出。...RSA就是他们三人姓氏开头字母拼在一起组成RSA是目前最有影响力公钥加密算法,它能够抵抗到目前为止已知绝大多数密码攻击,已被ISO推荐为公钥数据加密算法。...RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。另外一个rsa加密明文长度是有限制,如果要进行长数据加密需要进行分段加密。...Base64类: package rsa; public final class Base64 { static private final int BASELENGTH..., 请设置"); } Cipher cipher = null; try { // 使用默认RSA

3.7K10

Java总结

01—Java技术总结 Java语言基础 关键 数据类型 基本数据类型 字符串 数组 流程控制 if else for while swich break continue 运算 基本运算 移位运算...,具体实现类是Java运行时生成动态代理类 泛型 原理:编译器实现,通过类型擦除 集合 List ArrayList LinkedList Set HashSet TreeSet Map HashMap...加密 摘要 MD5 SHA-1 SHA-256 对称加密 DES AES 非对称加密 RSA DSA 应用 防篡改 签名 数据加密 数字证书 函数式编程 Lambda表达式 流式处理 多线程...实现Java并发模型 状态 New 初始 Runnable 运行状态-包含就绪和运行中 Blocked 阻塞,阻塞于锁 Waiting 等待,等待其他线程动作-通知或中断...ScheduledThreadPoolExecutor Future Fork/Join ThreadLocal 网络编程 网络体系 OSI模型 TCP/IP模型 IP协议 TCP协议 UDP协议 TCP编程 基于网络套接

44550

前后端分离 , 如何保证接口安全性 ?

解决办法: 前端在调用接口前随机生成一个字符串,然后通过rsa公钥进行加密处理,将加密结果放入到请求头中key , 然后将随机生成字符串 — key , 参与sign生成,最后进行接口调用。...使用流程 前端随机生成一个字符串,然后通过rsa公钥进行加密,将加密结果放入到请求头中 key = 加密结果(key) 客户端携带参数 nonce(随机数)、ts、sign去调用服务器端API token...RSA非对称加密,根据您项目需求可以进行替换,比如采用AES加密 关于过滤器返回给前端非法请求 当在过滤器中遇到非法请求时候,需要将错误结果响应给页面 ,但是我自己通过如下代码写入页面失败 response.setContentType...前端随机生成一个字符串,然后通过rsa公钥进行加密,将加密结果传输到后端,后端使用rsa私钥进行 * 解密,将结果存入到缓存中,失效时间为30s * 2....8位字符串。

1.5K70

URLEncode和URLDecode注意事项

编码, URL安全(将Base64URL非法字符如+,/=转为其他字符, 见RFC3548). */ public static String base64UrlSafeEncode(byte...字符解压 * * @param str * 对字符串解压 * @return 返回解压缩后字符串 utf-8 *...len 个字节写入此 byte数组输出流 out.write(buffer, 0, n); } // 使用指定 charsetName,通过解码字节将缓冲区内容转换为字符串...return out.toString("utf-8"); } } 注意:当进行URLEncode加密参数通过浏览器请求时,浏览器会自动URLDecode解密一次 。...并且对于"%" 、 "+" 等特殊字符有不同处理 也就是说,当需要传播字符,进行加密之后,进过HTTP Post请求或者 浏览器请求,接收方不需要再解密一次(这里代码工具类decode进行了两次)

2.6K20

如何使用RSA 对数据加解密和签名验签?一篇文章带你搞定

RSA算法简介 加密和解密使用相同密钥叫对称加密方式,而非对称加密算法(公钥加密方式)RSA加密与解密分别用不同密钥,公钥用于加密,私钥用于解密。...,首先使用S公钥对签名信息进行验签,确认身份信息,如果确认是发送者S,然后再R才利用私钥对加密消息进行解密,从而隔离非法数据包接收。...基本原理 base64 将 ASCII 码 或者二进制编码成只包含 A~Z、a~z、0~9、+ 、/ 这64个字符(26个大写字符、26个小写字符10个数字、+/)。...注:由于标准Base64编码后可能出现字符+和斜扛/,+和/在URL中不能直接作为参数,因此,Base64提供了urlsafe_b64encode方法将+和/分别转换为横杠-和下画线_,使用urlsafe_b64decode...Python实现RSA加解密和签名验签类 本文将RSA加密方法写成一个类,支持包含中文字符串分段加解密。

2.3K10

如何实现接口之间参数加密传输 - RSA算法对接口参数签名及验签

通常情况下为了达到以上所描述目的,我们首先向到使用非对称加密算法对传输数据进行签名以验证发送方身份,而RSA加密算法是目前比较通用非对称加密算法,经常被用有数字签名及数据加密,且很多编程语言标准库中都自带有...本文将使用Java标准库来实现 RAS密钥对 生成及数字签名和验签,密钥对中私钥由请求方系统妥善保管,不能泄露;而公钥则交由系统响应方用于验证签名。...RAS使用私钥对数据签名,使用公钥进行验签,生成RSA密钥对代码如下: package com.pyy.demo.util; import lombok.extern.slf4j.Slf4j; import...,base64字符串 * @throws InvalidKeyException InvalidKeyException * @throws NoSuchAlgorithmException...,看看如何实际使用RSA算法对接口参数进行签名及验签。

2.8K11

Java使用OpenSSL生成RSA公私钥进行数据加解密「建议收藏」

本文出处:Java使用OpenSSL生成RSA公私钥进行数据加解密_Slash Youth – Jack Chai-CSDN博客_java生成rsa公私钥,转载请注明。...RSA是目前最有影响力公钥加密算法,它能够抵抗到目前为止已知所有密码攻击,已被ISO推荐为公钥数据加密标准。目前该加密方式广泛用于网上银行、数字签名等场合。...也就是说Base64编码数据每行最多不超过76字符,对于超长数据需要按行分割。...2014年5月20日补充:最近又遇到RSA加密需求了,而且对方要求只能使用第一步生成未经过PKCS#8编码私钥文件。...然后使用Base64解码读出字符串,便得到priKeyData,也就是第一行代码中参数。

2.1K20

Android 客户端RSA加密实现方法

Android 客户端RSA加密实现方法 针对java后端进行RSA加密,android客户端进行解密,结果是部分乱码问题: 注意两点,编码问题和客户端使用算法问题 即:都使用UTF-8编码,...Base64使用一致,另外,使用下面的代码在后端和移动端解密只有一点不同: 移动端使用 Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding...字符串解码为二进制数据 * </p * * @param base64 * @return * @throws Exception */ public static byte[] decode(String...字符串转回文件 * </p * * @param filePath 文件绝对路径 * @param base64 编码字符串 * @throws Exception */ public static...[A]dleman) * </p * <p * 字符串格式密钥在未在特殊说明情况下都为BASE64编码格式<br/ * 由于非对称加密速度极其缓慢,一般文件不使用它来加密而是使用对称加密,<br

1.4K52

RSA加密算法java实现

最近有一个外部合作项目要求在数据传输过程中使用RSA加密算法对数据进行加密,所以需要编写一个加解密工具类,因为对方不是java语言,所以是各自实现这个工具,本文主要讨论实现以及双方调试过程中一些插曲...RSA加密算法对于加密数据长度是有要求。一般来说,明文长度小于等于密钥长度(Bytes)-11。解决这个问题需要对较长明文进行分段加解密,这个上面的代码已经实现了。 2....一旦涉及到双方开发,语言又不相同,不能够采用同一个工具时候,切记要约定以下内容。 a)约定双方BASE64编码 b)约定双方分段加解密方式。...我踩坑也主要是这里,不仅仅是约定大家分段大小,更重要是分段加密拼装方式。...doFinal方法加密完成后得到仍然是byte[],因为最终呈现是编码后字符串,所以你可以分段加密,分段编码和分段加密,一次编码两种方式(上面的代码采用是后一种,也推荐采用这一种)。

1K30

循序渐进学加密

字符串 123456经过 base64变换之后,得到了 MTIzNDU2,有人说这是 base64加密。...把字符串 123456经过 md5变换之后,得到了 E10ADC3949BA59ABBE56E057F20F883E,有人说这是 md5加密。...编码(Encoding)是把字符集中字符编码为指定集合中某一对象(例如:比特模式、自然数序列、8位节或者电脉冲),以便文本在计算机中存储和通过通信网络传递方法,常见例子包括将拉丁字母表编码成摩尔斯电码和...输出:我们选择 base64编码方式。 字符集:这里因为我们只加密英文字母和阿拉伯数字,所以选择 utf-8和 gb2312都是一样。...但是由于 java早期工程师犯一个命名上错误,他们把 AES填充算法名称设定为 pkcs5,而实际实现中实现是 pkcs7,所以我们在 java端开发解密时候需要使用 pkcs5。

83020

网络安全&密码学—python中各种加密算法

三、python中应用 通过采用合适加密技术和加强密钥管理,可以有效地保护数据机密性、完整性和可用性,防止数据泄露、非法访问和篡改等安全事件发生。...\xe5\xae\x89\xe5\x85\xa8' 二进制转化为原字符: xiaoyu安全 3、base64 Base64编码是密码学基础,它使用64个字符来表示任意二进制数据。...# 我们只需要将base64编码部分解码回原始bytes,然后再解码为utf-8字符串 return base64.b64decode(str_).decode('utf-8')...,保证数据库数据安全(md5不可逆),但是还是能够使用社工和密码字典进行密码爆破,建议使用密码10位数字以上 image-20240701203209792 5、sha1加密 SHA1,全称Secure...分组加密:AES采用分组加密方式,每个明文块被独立加密成密文块。AES标准分组长度为128位(即16节)。

13410

20.5 OpenSSL 套接RSA加密传输

一般情况下,当RSA密钥长度为1024位时,可以加密长度为128节,密钥长度为2048位时,可以加密长度为245节;当密钥长度为3072位时,可以加密长度为371节。...因此,如果需要加密数据长度超过了密钥长度允许范围,可以采用分段加密方法。我们可以将数据包切割为每个128个字符,这样就可以实现循环传输大量字符串。...,其中public_rsa_encrypt用于使用公钥对字符串进行加密,private_rsa_decrypt函数使用私钥对字符串进行解密,private_rsa_encrypt使用私钥加密,public_rsa_decrypt...public_rsa_encrypt函数并依次传入加密字符串,公钥路径以及加密存储位置,当需要解密时则调用private_rsa_decrypt函数实现对加密字符解密操作,使用代码如下所示;...,通过CutSplit()函数将字符串每100个字符切割一次,然后在客户端中先使用公钥对其进行加密加密后分块每次传输一批次加密数据即可,直到将完整字符串发送完成为止。

31850

盘点几个安卓逆向之常用加密算法

为什么要学习加密算法 在搞逆向进行抓包时候,可以经常发现一些莫名其妙字符串,可能是81dc9bdb52d04dc20036dbd8313ed055等之类一长串字符,这些是怎么生成呢?...digest中 //2. digest是加密之后数据,但是有不可见字符,不要使用hex或base64来展示 md5.update(plainText.getBytes(StandardCharsets.UTF...hex和base64来表示加密之后数据,因为直接加密有不可见字符 ByteString of = ByteString.of(digest); String hex = of.hex...因为加密和解密使用密钥相同,所以叫做对称加密算法,那不同,就是非对称咯! 注意了啊,对称加密算法密钥是可以随便给,但是有长度要求,不是乱给,但是加密内容无限制。...加密安全,但是性能差,加密长度有限制。 RSA可以用于加密解密,也可以用来数据签名。 Java私钥必须是pkcs8格式。

93220

20.6 OpenSSL 套接分发RSA公钥

通过上一节学习读者应该能够更好理解RSA加密算法在套接传输中使用技巧,但上述代码其实并不算完美的,因为我们公钥和私钥都必须存储在本地文本中且公钥与私钥是固定无法做到更好保护效果,而一旦公钥与私钥泄密则整个传输流程都将会变得不安全...20.6.1 RSA算法封装 要实现这个效果我们就需要封装一套可以在内存中生成密钥对函数,当需要传输数据时动态生成密钥对,并将公钥部分通过套接传输给对应客户端,当客户端收到公钥后则可以使用该公钥进行通信...与rsa_decrypt两个函数实现对特定字符加解密功能,输出效果图如下; 20.6.2 公钥动态配对 有了上述内存生成RSA密钥对方法,那么实现密钥对远程分发将变得很容易实现,首先我们来看客户端实现方式...,当客户端成功连接到了服务端则首先接收服务端传来公钥,当收到服务器传来公钥后通过使用rsa_encrypt函数并用公钥对待发送字符串进行加密加密后调用send将加密数据发送给服务端,解密动作与加密保持一致...,通过执行该函数我们可以得到一个动态内存加密密钥对,有了密钥对则我们就可以使用私钥对数据进行加密与解密操作,如下是服务端核心实现代码; int main(int argc, char* argv[])

17450

20.6 OpenSSL 套接分发RSA公钥

通过上一节学习读者应该能够更好理解RSA加密算法在套接传输中使用技巧,但上述代码其实并不算完美的,因为我们公钥和私钥都必须存储在本地文本中且公钥与私钥是固定无法做到更好保护效果,而一旦公钥与私钥泄密则整个传输流程都将会变得不安全...20.6.1 RSA算法封装要实现这个效果我们就需要封装一套可以在内存中生成密钥对函数,当需要传输数据时动态生成密钥对,并将公钥部分通过套接传输给对应客户端,当客户端收到公钥后则可以使用该公钥进行通信...与rsa_decrypt两个函数实现对特定字符加解密功能,输出效果图如下;20.6.2 公钥动态配对有了上述内存生成RSA密钥对方法,那么实现密钥对远程分发将变得很容易实现,首先我们来看客户端实现方式...,当客户端成功连接到了服务端则首先接收服务端传来公钥,当收到服务器传来公钥后通过使用rsa_encrypt函数并用公钥对待发送字符串进行加密加密后调用send将加密数据发送给服务端,解密动作与加密保持一致...WSADATA WSAData; // 初始化套接字库 if (WSAStartup(MAKEWORD(2, 0), &WSAData)) { return 0; } // 创建套接

18131

使用RSA算法对接口参数签名及验签

通常情况下为了达到以上所描述目的,我们首先会想到使用非对称加密算法对传输数据进行签名以验证发送方身份,而RSA加密算法是目前比较通用非对称加密算法,经常被用于数字签名及数据加密,且很多编程语言标准库中都自带有...本文将使用Java标准库来实现RSA密钥对生成及数字签名和验签,密钥对中私钥由请求方系统妥善保管,不能泄漏;而公钥则交由系统响应方用于验证签名。...RSA使用私钥对数据签名,使用公钥进行验签,生成RSA密钥对代码如下: package com.example.demo.util; import java.security.KeyPair; import...param rsaPrivateKey 私钥 * @param src 参数内容 * @return 签名后内容,base64字符串 * @throws...,看看如何实际使用RSA算法对接口参数进行签名及验签。

1.5K30
领券