gpt4 book ai didi

java - Grails 密码使用 rsa 加密

转载 作者:行者123 更新时间:2023-12-01 14:15:17 26 4
gpt4 key购买 nike

我想创建一个名为 User 的模块。该模块由姓名、用户名、电话号码和密码组成。我想使用 RSA 算法加密和解密密码。

这是我的 RSA.Java

import java.math.BigInteger;
import java.security.SecureRandom;

/**
* Simple RSA public key encryption algorithm implementation.
*/

public class RSA {
private BigInteger n, d, e;

private int bitlen = 1024;

/** Create an instance that can encrypt using someone elses public key. */
public RSA(BigInteger newn, BigInteger newe) {
n = newn;
e = newe;
}

/** Create an instance that can both encrypt and decrypt. */
public RSA(int bits) {
bitlen = bits;
SecureRandom r = new SecureRandom();
BigInteger p = new BigInteger(bitlen / 2, 100, r);
BigInteger q = new BigInteger(bitlen / 2, 100, r);

n = p.multiply(q);
BigInteger m = (p.subtract(BigInteger.ONE)).multiply(q.subtract(BigInteger.ONE));

e = new BigInteger("3");
while (m.gcd(e).intValue() > 1) {
e = e.add(new BigInteger("2"));
}
d = e.modInverse(m);
}

/** Encrypt the given plaintext message. */
public synchronized String encrypt(String message) {
return (new BigInteger(message.getBytes())).modPow(e, n).toString();
}

/** Encrypt the given plaintext message. */
public synchronized BigInteger encrypt(BigInteger message) {
return message.modPow(e, n);
}

/** Decrypt the given ciphertext message. */
public synchronized String decrypt(String message) {
return new String((new BigInteger(message)).modPow(d, n).toByteArray());
}

/** Decrypt the given ciphertext message. */
public synchronized BigInteger decrypt(BigInteger message) {
return message.modPow(d, n);
}

/** Generate a new public and private key set. */
public synchronized void generateKeys() {
SecureRandom r = new SecureRandom();
BigInteger p = new BigInteger(bitlen / 2, 100, r);
BigInteger q = new BigInteger(bitlen / 2, 100, r);
n = p.multiply(q);
BigInteger m = (p.subtract(BigInteger.ONE)).multiply(q
.subtract(BigInteger.ONE));
e = new BigInteger("3");
while (m.gcd(e).intValue() > 1) {
e = e.add(new BigInteger("2"));
}
d = e.modInverse(m);
}

/** Return the modulus. */
public synchronized BigInteger getN() {
return n;
}

/** Return the public key. */
public synchronized BigInteger getE() {
return e;
}
}

这是我的域 User.groovy :

class User{

String name
String username
String phoneNo
String password

}

这是我的 UserController.groovy :(保存并更新)

class UserController {

static allowedMethods = [save: "POST", update: "POST", delete: "POST"]

def index = {
redirect(action: "list", params: params)
}

def save = {
def userInstance = new User(params)
if (userInstance .save(flush: true)) {
flash.message = "${message(code: 'default.created.message', args: [message(code: 'user.label', default: 'User'), userInstance .id])}"
redirect(action: "show", id: userInstance .id)
}
else {
render(view: "create", model: [userInstance : userInstance ])
}
}


def edit = {
def userInstance = User.get(params.id)
if (!userInstance ) {
flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'user.label', default: 'User'), params.id])}"
redirect(action: "list")
}
else {
return [userInstance : userInstance ]
}
}

def update = {
def userInstance = User.get(params.id)
if (userInstance ) {
if (params.version) {
def version = params.version.toLong()
if (userInstance .version > version) {

userInstance .errors.rejectValue("version", "default.optimistic.locking.failure", [message(code: 'user.label', default: 'User')] as Object[], "Another user has updated this User while you were editing")
render(view: "edit", model: [userInstance : userInstance ])
return
}
}
userInstance .properties = params
if (!userInstance .hasErrors() && userInstance .save(flush: true)) {
flash.message = "${message(code: 'default.updated.message', args: [message(code: 'user.label', default: 'User'), userInstance .id])}"
redirect(action: "show", id: userInstance .id)
}
else {
render(view: "edit", model: [userInstance : userInstance ])
}
}
else {
flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'user.label', default: 'User'), params.id])}"
redirect(action: "list")
}
}
}

我必须在保存和编辑 Controller 中添加什么,以便当我保存表单时密码被加密,然后当我编辑表单时密码将被解密?请帮助我,因为我是 Java 和 grails 的新手,非常感谢:)

最佳答案

类似于SpringSecurity Plugin ,您可以使用 beforeInsertbeforeUpdate 事件对您的密码进行转换。在这些方法中实现您的加密。

class User {

transient springSecurityService

String username
String password
boolean enabled
boolean accountExpired
boolean accountLocked
boolean passwordExpired

static constraints = {
username blank: false, unique: true
password blank: false
}

static mapping = {
password column: '`password`'
}

Set<Role> getAuthorities() {
UserRole.findAllByUser(this).collect { it.role } as Set
}

def beforeInsert() {
encodePassword()
}

def beforeUpdate() {
if (isDirty('password')) {
encodePassword()
}
}

protected void encodePassword() {
password = springSecurityService.encodePassword(password)
}
}

关于java - Grails 密码使用 rsa 加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18162169/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com