- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
几天前,我提出了一个有关 Jasypt 问题的问题。我引用了一个抛出 EncryptionOperationNotPossibleException 的较大程序。嗯,我还是没能弄清楚问题所在。这是正在发生的事情:(这提供了对其工作原理的深入了解:)
Step 1: Connection
Client Connects
Server Callback: connection(Selection key)
Server Sends Cipher
Client Receives Cipher
Sends encrypted "connection" message "YYPgDOGffgxu6aahZyNSgw=="
Client Receives Encrypted msg "YYPgDOGffgxu6aahZyNSgw=="
Client Throws EncryptionOperationNotPossibleExcepton
at line 45
这真是紫星啊。字符编码可能有问题,但我不确定。服务器和客户端目前在同一台计算机上运行,我很确定我自始至终都在使用 US-ASCII。相关代码如下:
这是客户端:
public static String CHAR_ENC_B = "US-ASCII";
public static String cipher = null;
public static void main(String[] argv) throws UnknownHostException {
final BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
AbstractBlockingClient client = new AbstractBlockingClient(InetAddress.getByName("127.0.0.1"),4444) {
@Override
protected void messageReceived(ByteBuffer message) {
if (cipher==null) {
cipher=bb2str(message);
textEncryptor.setPassword(cipher);
System.out.println("Cipher(20):"+cipher);}
else {
System.out.println("Raw Message(22):"+bb2str(message));
System.out.println("Decrypted(23):"+textEncryptor.decrypt(bb2str(message)));
String tosend = textEncryptor.encrypt("Test Reply");
try {
this.write(textEncryptor.encrypt("Test Reply").getBytes(CHAR_ENC_B));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
@Override
protected void disconnected() {
}
@Override
protected void connected(boolean alreadyConnected) {
}
};
client.run();
}
这是服务器:
public static String CHAR_ENC_B = "US-ASCII";
public static void main(String[] argv) {
//Create the server:
AbstractServer server = new AbstractServer(4444) {
@Override
protected void messageReceived(ByteBuffer message, SelectionKey key) {
System.out.println("Recieved Raw Message(18):"+bb2str(message));
System.out.println("Recieved Decrypted Message(19):"+decrypt_string(getCS(key).ekey,bb2str(message)));
ClientSelector replacement = process_message(decrypt_string(getCS(key).ekey,bb2str(message)),getCS(key));
key.attach(replacement);
}
@Override
protected void connection(SelectionKey key) {
ClientSelector newone = new ClientSelector(key,"","","");
newone.ip = ((SocketChannel)key.channel()).socket().getRemoteSocketAddress().toString();
key.attach(newone);
this.write(key,newone.ekey.getBytes());
String tosend = encrypt_string(newone.ekey,"a");
this.write(key,tosend.getBytes());
System.out.println("Cipher:"+newone.ekey);
System.out.println("Encrypted String Sent(34):"+tosend);
}
@Override
protected void disconnected(SelectionKey key) {
}
@Override
protected void started(boolean alreadyStarted) {
System.out.println("SERVER STARTED");
}
@Override
protected void stopped() {
}
};
server.run();
}
public static String decrypt_string(String key, String msg) {
BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
textEncryptor.setPassword(key);
return textEncryptor.decrypt(msg);
}
public static String encrypt_string(String key, String msg) {
BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
textEncryptor.setPassword(key);
return textEncryptor.encrypt(msg);
}
这些实际上并不是要发送的消息,但这是一个很好的起点。
一些信息:ClientSelector
是一个类,允许服务器识别正在与谁通信(使用用户名、密码、IP 等),并且 bb2str
将 ByteBuffer
转换为 String
。
任何帮助将不胜感激。我希望这不是像上一个那样的愚蠢错误!谢谢。
编辑:我添加了 bb2str 的代码:
public static String bb2str(ByteBuffer bytebuff) {
byte[] bytearr = new byte[bytebuff.remaining()];
bytebuff.get(bytearr);
String s = null;
try {s = new String(bytearr,"US-ASCII");}
catch (UnsupportedEncodingException e) {e.printStackTrace();}
return s;
}
最佳答案
我明白了:
事情是这样的... bb2str()
的实现我这里写的好像清空了bytebuffer。所以我只能调用bb2str
一次。如果我多次调用它,那么我最终会得到一个空字符串,这会搞砸 jayspt,因为在代码中:
if (this.saltGenerator.includePlainSaltInEncryptionResults()) {
// Check that the received message is bigger than the salt
if (encryptedMessage.length <= this.saltSizeBytes) {
throw new EncryptionOperationNotPossibleException();
}
}
当然还有encryptedMessage.length
将是 <= this.saltSizeBytes
如果encryptedMessage.length
为零且 this.saltSizeBytes
是 8。
已修复。 war 结束了。
关于java - Jasypt EncryptionOperationNotPossibleException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16989041/
我尝试在我的 Jasypt 中使用 3DES,但遇到异常。 但是当我使用默认算法时它工作正常 这是代码 - public MyEncryptablePropertyResolver(Environme
尝试使用 encrypt.sh 实用程序,我的密码包含特殊字符: ./encrypt.sh input="$%#!"password="your_jasypt_password"algorithm="
我有简单的java控制台应用程序,我在其中使用Jasypt1.9.2来加密数据库连接字符串。代码在 Eclipse 中运行得很好,但是导出为 Jar 的应用程序会出现此错误 这是我的简单主类:
我正在使用grails Jasypt Encryption plugin加密数据库中的数据。 如果我在Config.groovy文件中设置jasypt配置,例如: jasypt { algor
我只是想知道是否可以强制加密器始终为相同的输入返回相同的加密值。 StandardPBEStringEncryptorencryptor = new StandardPBEStringEncrypto
同事们,我在我的 spring-boot 项目中使用了 Jasypt(在 Windows 上运行的独立 jar)。我需要通过命令行传递主密码才能运行 jar 。它看起来像: java -jar -Dj
情况是我有一个使用 hibernate 的应用程序。我将其配置为与 jasypt 一起使用,以便该应用程序将数据加密到数据库中。然后,我有另一个从数据库读取数据的应用程序,它不使用 hibernate
我们的安全部门希望我们使用 256 位加密来加密 SSN、用户名等,因此我们决定使用 JASYPT,示例代码如下: encryptor = new StandardPBEStringEncryptor
我想使用 Jasypt 库通过 EncryptablePropertyPlaceholderConfigurer 类在 Spring 中解密属性。我想使用非对称公钥/私钥方法加密/解密这些属性。 您能
我正在用 Java 编写一个需要对字符串进行加密和解密的程序。我正在使用 Jasypt 的 BasicTextEnctyptor。这是一个复杂的应用程序——使用异步网络和类似的东西。加密在服务器和客户
我想知道是否有像 JASYPT 这样的替代库,它可以帮助我加密/解密密码。 最佳答案 是的,有一些。我不确定你到底在找什么,但我一直在使用 BouncyCastle取得了巨大的成功。也许您也会感兴趣。
几天前,我提出了一个有关 Jasypt 问题的问题。我引用了一个抛出 EncryptionOperationNotPossibleException 的较大程序。嗯,我还是没能弄清楚问题所在。这是正在
我将 Hibernate3 与 MySql DB 一起使用,并尝试添加 Jasypt 库来处理用户密码的加密。 我在 hibernate.cfg.xml 中配置了 Jasypt,如下所示: o
我正在尝试桌面应用程序的登录/注册系统。我有一个注册表单和登录表单,凭证信息保存到 PostgreSQL 数据库中。我一开始没有加密信息,一切正常,但现在我想加密密码以保存到数据库中。我正在使用Jas
在 org.jasypt.encryption.pbe.StandardPBEByteEncryptor 中,当我比较其他几个 key 派生功能时, key 派生看起来有所不同。 initialize
在我们基于 Spring + hibernate 的 Web 应用程序中,我配置了 jasypt 来加密存储在数据库中的用户联系电话。它对加密工作正常,因为数据库包含加密字符串,而且值已解密并正确显示
您好,我有一个 Java 应用程序。我想使用 Jasypt 使用基于大小和算法生成的随机盐来加密和解密密码。 这就是我想要实现的。 创建一个随机盐。 用盐加密密码。 为用户保存盐和加密密码。 我想要盐
我使用 Java 6、Jasypt 和 BouncyCaSTLe 生成散列密码。我将它们存储在具有默认 UTF-8 字符编码的 MySQL 5.5 数据库中。我试图弄清楚我使用 SHA-256 哈希算
它适用于桌面应用程序,因此我只需要基本的登录安全性,并且我使用一个函数来加密密码,并使用另一个函数将密码从 UI 传递并散列保存到数据库中,并返回 true 或 false 取决于是否匹配。 我尝试使
加密我使用的密码(修改自 http://www.jasypt.org/encrypting-texts.html ): BasicTextEncryptor textEncryptor = new B
我是一名优秀的程序员,十分优秀!